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

Quiz does not approve a good anserws

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 quest[5], odpA[5], odpB[5], odpC[5], odpD[5];
char correct[5];
char your_answer;
int punkty=0;

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

    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
    {
        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[0]; 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;

            if (tolower(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<<endl;
    }   
    else
    {
        cout<<"nie ma takiego pliku"<<endl;
        exit(0);        //zakonczenie programu z bibl <cstdlib>
    }

    return 0;

}