• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

W programie zmienna jest podmieniana.

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 28 lutego 2016 w C i C++ przez Barpol Nowicjusz (170 p.)
edycja 28 lutego 2016 przez Barpol

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <windows.h>
#include <string>
#include <algorithm>

using namespace std;

int nr_poziomu=1,ile_linii=0;

int pyt_pierwsze(int z); // z jest to numer poziomu

int main()
{

for (int i=0; i<=2; i++)
{
pyt_pierwsze(nr_poziomu);
nr_poziomu++;
}
return 0;
}

int pyt_pierwsze(int z)
{
string odp_j[3],odp_d[3],odp_t[3],odp_c[3],odp_p[3],poprawne[3],pytanie[3],odpowiedz; //odp_j = odpowiedz jeden, odp_d = odpowiedz dwa itd.
int punkty=0,nr_poprawnej=0,nr_pytania=0;
    fstream plik;
    plik.open("quiz.txt", ios::in);
    string linia;
    while (getline(plik,linia))
    {switch (ile_linii)
        {
        case 1: pytanie[nr_pytania]= linia; break;
        case 2: odp_j[nr_pytania] = linia; break;
        case 3: odp_d[nr_pytania] = linia; break;
        case 4: odp_t[nr_pytania]  = linia; break;
        case 5: odp_c[nr_pytania] = linia; break;
        case 6: odp_p[nr_pytania] = linia; break;
        }
    ile_linii++;
    if (ile_linii==7)
    {
        ile_linii=1;
        nr_pytania++;
    }
    }
plik.close();

for(;;)
{
    cout<<odp_p[z-1]<<endl;//zmienna mimo ze jest widoczna, to po jej wpisaniu wyswietla sie "nie ma takiej odpowiedzi"
                           //i po wpisaniu czterech poprawnych odpowiedzi przyjmuje wartosc ostatniej wpisanej
    cout<<"Poziom "<<z<<endl;
    cout<<"--------------"<<endl;
    if(punkty==1)
    {
        cout<<poprawne[0]<<endl;
        cout<<"--------------"<<endl;
    }
    if(punkty==2)
    {
        cout<<poprawne[0]<<endl;
        cout<<poprawne[1]<<endl;
        cout<<"--------------"<<endl;
    }
    if (punkty==3)
    {
        cout<<poprawne[0]<<endl;
        cout<<poprawne[1]<<endl;
        cout<<poprawne[2]<<endl;
        cout<<"--------------"<<endl;
    }
     if (punkty==4)
    {
        cout<<poprawne[0]<<endl;
        cout<<poprawne[1]<<endl;
        cout<<poprawne[2]<<endl;
        cout<<poprawne[3]<<endl;
        cout<<"--------------"<<endl;
    }
cout<<pytanie[z-1];
getline(cin,odpowiedz);
transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::toupper);
if(((odpowiedz==odp_j[z-1])||(odpowiedz==odp_d[z-1])||(odpowiedz==odp_t[z-1])||(odpowiedz==odp_c[z-1])||(odpowiedz==odp_p[z-1]))&&(odpowiedz!=poprawne[0])&&(odpowiedz!=poprawne[1])&&(odpowiedz!=poprawne[2])&&(odpowiedz!=poprawne[3]))
{
    cout<<"Poprawna odpowiedz!"<<endl;
    poprawne[nr_poprawnej]=odpowiedz;
    nr_poprawnej++;
    Sleep(3000);
    punkty++;
       system("cls");
}
else
{cout<<"Nie ma takiej odpowiedzi!"<<endl;
Sleep (3000);
   system("cls");
}
if (punkty==5)
{
cout<<"Gratulacje, przeszedles ten poziom!"<<endl;
Sleep (5000);
system("cls");
return 0;
}
}
}

 

  1. Powyzej przedstawiam kod progamu który zadaj pytanie i wymaga 5 konkretnych odpowiedzi. Po to żeby dodawanie nowych poziomów było proste użyłem funkcji zamknietej w petli.

Pytanie i odpowiedz są pobierane z dołączonego pliku tekstowego. Pierwsze pytanie brzmi: 

Podaj śląskie kluby piłkarskie:

a) Polonia Bytom, b) Ruch chorzow, c) Piast gliwice, d) Gornik Zabrze i e) Ruch Radzionkow.

Pierwsze 4 odpowiedzi dzialaja bardzo dobrze jednak po wpisaniu: Ruch Radzionkow program twierdzi ze takiej zmiennej nie ma.

​2. Czy ktoś mógłby mi pomów rozgryść dlaczego tak sie dzieje?

3. Mysle ze program znajduje sie w dolnej czesci kodu (od poziomej linii) ale dla pewnosci wstawiam cały kod.

4. Jest to mój pierwszy taki program i jestem bardzo początkujący więc w kodzie mogą być dziwne rozwiązania.

5. Z góry dziękuje za pomoc.

2 odpowiedzi

+2 głosów
odpowiedź 28 lutego 2016 przez Jutta Obywatel (1,190 p.)
wybrane 28 lutego 2016 przez Barpol
 
Najlepsza

Witam!

Wg mnie zmienna ile_linii powinna równać się przy deklaracji =1 a nie=0;

deklarujesz, że tablica poprawne[3] ma 3 szufladki a potem używasz zapisu : poprawne [0], poprawne[1], poprawne[2], poprawne[3] czyli jak dla mnie powinno się zadeklarować poprawne[4]; albo zostawic tylko poprawne [0], poprawne[1], poprawne[2].

wcześniej miałeś   if (ile_linii==8) a teraz   if (ile_linii==7) ale według mnie po prostu jeszcze w switchu powinno być case 7: poprawne[p] = linia; break; 

Wg mnie funkcja powinna zwracać wartość konkretną ; po co funkcja, która ma na końcu return 0; 

pozdrawiam,

 

komentarz 28 lutego 2016 przez Barpol Nowicjusz (170 p.)
Dziekuje za odpowiedz !

W praktyce jedynym problemem była za mała ilosc w tablicy 'poprawne'. Po zmienieniu wartosci z 3 na 4, wszystko dziala poprawnie.
komentarz 28 lutego 2016 przez Jutta Obywatel (1,190 p.)
Aha; no to ok; Cieszę się, że pomogło. Dla mnie to też pouczające bo rzeczywiście trudno odnaleźć się w cudzym kodzie i jeszcze do końca w całości nie czaje tego kodu ale to co zauważyłam to napisałam;
+1 głos
odpowiedź 28 lutego 2016 przez Radfler VIP (101,030 p.)

Strasznie ciężko się analizuje taki kod:

1. Popraw czytelność, dodaj wcięcia,

2. Daj jakieś sensowne nazwy zmiennym. Co ma reprezentować obiekty zmienna, k, p,

3. Kod przy wstawianiu się trochę rozwalił, popraw to...

1
komentarz 28 lutego 2016 przez Barpol Nowicjusz (170 p.)
Już poprawiłem na jak najbardziej czytelny i nazwałem po ludzku zmienne. Wstawiłem równiez pełny kod.

Podobne pytania

0 głosów
2 odpowiedzi 205 wizyt
0 głosów
1 odpowiedź 461 wizyt
pytanie zadane 25 kwietnia 2021 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)
0 głosów
1 odpowiedź 324 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...