Program typu quiz – wczytywanie danych z pliku tekstowego

0

Cześć. Staram się robić kurs c++ na kanale Pasja Informatyki. Przy jednym z odcinków pojawił się u mnie spory problem. Chodzi o wczytanie pliku txt, na którym są dane do quizu, który mamy stworzyć. Wydaje mi się, że mój kod wygląda dokładnie tak, jak ma wyglądać, ale mimo to przy próbie uruchomienia programu, ten wysypuje się. Dlatego podejrzewam, że winny jest tu, z jakiegoś powodu, plik txt (mimo że to zwykły plik w notatniku). Gdyby ktoś miał czas byłbym bardzo wdzięczny za rzut oka na kod i wspomniany plik oraz za ewentualne porady.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string nick, temat;
string tresc [5];
string odpA [5], odpB [5], odpC [5], odpD [5];
string poprawna [5];
int punkty=0;

int main()
{
int nr_linii = 1;
string linia;
int nr_pytania=0;
string odpowiedz;

fstream plik;
plik.open("quiz.txt", ios::in);

if(plik.good()==false)
{
    cout<<"Podany plik nie istnieje.";
    exit(0);
}
while(getline(plik,linia))
{
    switch(nr_linii)
    {
case 1: nick = linia; break;
case 2: temat = linia; break;
case 3: tresc[nr_pytania] = linia; break;
case 4: odpA[nr_pytania] = linia; break;
case 5: odpB[nr_pytania] = linia; break;
case 6: odpC[nr_pytania] = linia; break;
case 7: odpD[nr_pytania] = linia; break;
case 8: poprawna[nr_pytania] = linia; break;
    }
    if (nr_linii=8)
    {
        nr_linii=2;
        nr_pytania++;
    }
    nr_linii++;
}
plik.close();
for (int i=0; i<=4; i++)
    {
        cout<<endl<<tresc[i]<<endl;
        cout<<tresc[i]<<endl;
        cout<<"A. "<<odpA[i]<<endl;;
        cout<<"B. "<<odpB[i]<<endl;;
        cout<<"C. "<<odpC[i]<<endl;;
        cout<<"D. "<<odpD[i]<<endl;;

        cout<<"Twoja odpowiedz :";
        cin>>odpowiedz;
transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(),::tolower);
if(odpowiedz==poprawna[i])
{
    cout<< "Dobrze!"<<endl;
    punkty++;
}
else cout<<"Zle! Poprawna odpowiedz to: "<<poprawna[i]<<endl;

    }

    cout<<"Koniec quizu. Zdobyte punkty: "<<punkty<<"/5.";
    return 0;
}

3
  1. formatowanie kodu tragiczne
  2. zmienne globalne -> do usuniecia
  3. tablice zmienic na std::vector
  4. czy plik jest w tym samym folderze? (jezeli odpalasz w debug, to musisz go meic w folderze debug)
  5. magic numbers
  6. wczytaj plik w ten sposob https://stackoverflow.com/questions/7868936/read-file-line-by-line-using-ifstream-in-c

popraw to wszystko to zacznie program dzialac

1

Wydaje mi się, że mój kod wygląda dokładnie tak, jak ma wyglądać, ale mimo to przy próbie uruchomienia programu, ten wysypuje się. Dlatego podejrzewam, że winny jest tu, z jakiegoś powodu, plik txt

Cóż za samokrytyka.

if (nr_linii = 8) // <-- tutaj jest przypisanie, zamiast porównania

Gdyby użyć debuggera, taki błąd wyszedłby od razu.

0

Po raz kolejny ten kiepski kod ktoś wkleja i szuka pomocy. Może poszukajcie ludzie lepszego kursu, bo po tym kodzie widać, że ten jest słaby, nie dość, że jak widać uczący się go nie rozumie to dodatkowo jest co najwyżej mierny...

3
kaczus napisał(a):

Po raz kolejny ten kiepski kod ktoś wkleja i szuka pomocy. Może poszukajcie ludzie lepszego kursu, bo po tym kodzie widać, że ten jest słaby, nie dość, że jak widać uczący się go nie rozumie to dodatkowo jest co najwyżej mierny...

Spróbowałem namierzyć źródło. Najpierw wyszło mi to: http://informatyki18.rssing.com/browser.php?indx=67524925&item=32785
Wyszukanie kaskadowe "Pasja informatyki Youtube C++ odcinek 7" i pokazało się to
I oczywiście autorem jest gość, którego tu już szeroko krytykowaliśmy w niezliczonych wątkach.

IMO zamiast zrzędzić na autora lepiej byłoby upowszechnić inne materiały skierowane do newbie
Np blogi od ludzi kompetentnych: https://gynvael.coldwind.pl/ albo https://dev.krzaq.cc/
albo zrobić coś konkurencyjnego.

0

Dziękuję za sygnał, że z tym kursem jest coś nie tak. Sam zorientowałbym się na pewno o wiele później, więc jednak opłaciło się wstawić tu ten kod :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1