2016-10-10 2 views
1

私は質問と回答をtxtファイルからロードしたいクイズを作りました。クイズは良い答えを承認しません

このプログラムを実行すると、正解を選択したにもかかわらず、正しく表示されません。

たとえば、最初の回答は "c"で、2番目の回答は "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ロードしたい。

+5

あなたの質問は? –

+2

ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

私はプログラムが正解。 –

答えて

0

変更:

  1. 正しい[] にCHARタイプ。その後、ケース8を変更し、tolower()への正解をチェックする必要がありました。
  2. ファイルのオープンとエラー処理が簡単になりました。

コードで正しい回答が認識されるようになりました。あなたがまだ問題を抱えている場合は教えてください。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; 

    } 
+1

ありがとう、今はすべてがシンプルでクリアです、もう一度ありがとう! –

+0

@ S.Grzejnik私はあなたのオリジナルの質問にいくつかのコメントを取り入れながらこのコードを改訂/改善し、この答えを更新しました – herteladrian

関連する問題