c++ - 测验不认可一个好的答案

标签 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. 将[] 改正为char 类型。然后需要更改案例 8 并检查 tolower() 的正确答案。
  2. 使文件打开和错误处理更简单。移除了 exit(0) 以遵守良好的编程习惯

代码现在可以识别正确答案。如果您还有问题,请告诉我 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;

    }

关于c++ - 测验不认可一个好的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964833/

相关文章:

c++ - OpenCV:在while循环中填充Mat?

c++ - vector (容器)是否需要使用 "allocator"?

c++ - 如何处理错误 "vtkTrivialProducer :This data object does not contain the requested extent"?

c++ - Visual Studio 2008 C++ 无 x64 平台

c++ - boost Asio-ubuntu

c++ - Winsock 2,将变量压缩成一个字符串,发送出去,然后接收并读回

c++ - 如何在macOS上的C++项目中使用DCMTK

c++ - C/C++ 中的 Unicode 字符串规范化

c++ - 使用 Intel MKL 的 3D 卷积

c++ - 在 OpenGL 中用极坐标绘制正方形