测验不赞成一个好的答案

时间:2016-10-10 18:47:59

标签: c++

我正在进行测验,我想从txt文件中加载问题和答案。

当我运行此程序时,即使我选择了正确的答案,也表明它不正确。

例如,第一个答案应为“c”,第二个答案应为“d”。

我将部分文字改为英文,但我认为从上下文来看,一切都是可以理解的。

#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;
}

我要加载的here's the text file

1 个答案:

答案 0 :(得分:0)

的变化:

  1. 将[]更改为 char 类型。然后需要更改案例8并检查tolower()的正确答案。
  2. 使文件打开和错误处理更简单。删除退出(0)以遵守良好的编程习惯
  3. 代码现在识别正确的答案。如果你仍然有麻烦,请告诉我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;
    
        }