S.Grzejnik S.Grzejnik - 1 month ago 8
C++ Question

Quiz does not approve a good answer

I'm making a quiz, where I want to load the questions and answers from a

txt
file.

When I ran this program, even though I chose a correct answer, it shows that it was incorrect.

For example, the first answer should be "c", and second should be "d".

I changed some of the text to English, but I think everything is understandable from the context.

#include <iostream>
#include <fstream> //bibl your_answerialna za zapis (od file)
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string topic, nick;
string quest[5], odpA[5], odpB[5], odpC[5], odpD[5], correct[5];
string your_answer;
int punkty=0;

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

fstream plik; //zmienna plikowa tj nazwa pliku w kodzie zrodlowym + jej nazwa, moze byc ich wiele w programie

plik.open("quiz.txt", ios::in); //funcka otwarcia zmiennej plik (nazwa pliku , tryb otwarcia), ios:in tj wprowadz do programu

if(plik.good()==false) //funkcji z bibl fstrem sprawdzajaca czy plik istnieje

{
cout<<"nie ma takiego pliku";
exit(0); //zakonczenie programu z bibl <cstdlib>
}



while(getline(plik, linia)) //pobieramy linie do "linia"
{
switch(nr_linii)
{
case 1: topic=linia; break;
case 2: nick=linia; break;
case 3: quest[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: correct[nr_pytania] = linia; break;
}
if(nr_linii==8) {
nr_linii=2;
nr_pytania++;
} //gdy program zczyta linie 8, wracamy do 8, i zwiekszamy nr pytania zapisujac jedo bibliotek
nr_linii++;
}
plik.close(); //funkca zamykajaca


for(int i=0; i<=4; i++)
{
cout<<"your_answer on question"<<endl;
cout<<quest[i]<<endl;
cout<<"A "<<odpA[i]<<endl;
cout<<"B "<<odpB[i]<<endl;
cout<<"C "<<odpC[i]<<endl;
cout<<"D "<<odpD[i]<<endl;
cout<<"twoja odp";
cin>>your_answer;

transform(your_answer.begin(), your_answer.end(), your_answer.begin(), ::tolower); //zamian duzych liter na male
if (your_answer==correct[i])
{
cout<<"Dobrze! Zdobywasz punkt!"<<endl;
punkty++;
}
else
cout<<"Fail, no point, correct answer is: "<<correct[i]<<endl;

}

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


And here's the text file which I want to load.

Answer

Changes:

  1. correct[] to char type. Then needed to change case 8 and checking for correct answer to tolower().
  2. Made file opening and error handling simpler. Removed exit(0) to abide to good programming practices

The code recognizes the correct answers now. Let me know if you still have troubles S.Grzejnik

    #include <iostream>
    #include <fstream>       //bibl your_answerialna za zapis (od file)
    #include <cstdlib>
    #include <algorithm>
    #include <string>

    using namespace std;

    string topic, nick;
    string parts[5][5]; //5 questions and 5 string parts to each one
    char correct[5];
    char your_answer;
    int punkty=0;

    int main()
    {
        string linia;

        ifstream plik;                       //zmienna plikowa tj nazwa pliku w kodzie zrodlowym + jej nazwa, moze byc ich wiele w programie

        plik.open("quiz.txt");       //funcka otwarcia zmiennej plik (nazwa pliku , tryb otwarcia), ios:in tj wprowadz do programu

        if(plik)                                   //funkcji z bibl fstrem sprawdzajaca czy plik istnieje
        {
            getline(plik, topic);
            getline(plik, nick);

            for(int pytanie = 0; pytanie < 5; pytanie++) {
                getline(plik, linia);
                for(int nr_linia = 0; nr_linia < 5; nr_linia++) {
                    parts[pytanie][nr_linia] = linia;
                    getline(plik, linia);
                }
                correct[pytanie] = linia[0];
            }
            plik.close();               //funkca zamykajaca

            for(int pytanie = 0; pytanie < 5; pytanie++)
            {
                    cout<<"your_answer on pytanieuestion"<<endl;
                    cout<<parts[pytanie][0]<<endl;
                    cout<<"A "<<parts[pytanie][1]<<endl;
                    cout<<"B "<<parts[pytanie][2]<<endl;
                    cout<<"C "<<parts[pytanie][3]<<endl;
                    cout<<"D "<<parts[pytanie][4]<<endl;

                    cout<<"twoja odp: ";
                    cin>>your_answer;

                    if (tolower(your_answer)==correct[pytanie])
                    {
                        cout<<"Dobrze! Zdobywasz punkt!"<<endl;
                        punkty++;
                    } 
                    else
                    {
                        cout<<"Fail, no point,  correct answer is: "<<correct[pytanie]<<endl;
                    }
            }

            cout<<"Koniec quizu. Zdobyte punkty: "<<punkty<<endl;
        }   
        else
        {
            cout<<"nie ma takiego pliku"<<endl;
            exit(0);        //zakonczenie programu z bibl <cstdlib>
        }

        return 0;

    }