2015-10-22 10 views
0

我試圖編寫一個if/else語句來說'如果選擇的隨機問題是數組中的第一個做這個....'等等數組中的所有成員。然而,它默認每一個被選作陣列第一個成員的問題並執行該行動。我怎樣才能把它分開?在if/else語句中調用數組的成員

if (choice == 1) 
     { 
      enum fields{ QUESTS, ANS_1, ANS_2, ANS_3, ANS_4, NUM_FIELDS }; 
      string QUEST[NUM_QUEST][NUM_FIELDS] = 
      { 
       { "What course is this?\n", "A)C++\n", "B)DID\n", "C)Intro to Game\n", "D)Yoga" }, 
       { "Who am I?\n", "A)Bill\n", "B)Nye\n", "C) 24601\n", "D)No one\n" }, 
       { "Are you actually reading this?\n", "A) Yes\n", "B)No\n", "C)Maybe\n", "D)Who wants to know?\n" }, 
       { "Will this program work?\n", "A)Of course it will!\n", "B)It might\n", "C)Are you kidding me?\n", "D)Gods only know." }, 
       { "Where would I rather be?\n", "A)Home\n", "B)Europe\n", "C)Anywhere but here\n", "D)All of the above\n" } 
      }; 
      srand(static_cast<unsigned int>(time(0))); 
      int randomQuest = (rand() % NUM_QUEST); 
      string question = QUEST[randomQuest][QUESTS]; 
      cout << question; 
      string printAns1 = QUEST[randomQuest][ANS_1]; 
      string printAns2 = QUEST[randomQuest][ANS_2]; 
      string printAns3 = QUEST[randomQuest][ANS_3]; 
      string printAns4 = QUEST[randomQuest][ANS_4]; 
      cout << printAns1; 
      cout << printAns2; 
      cout << printAns3; 
      cout << printAns4; 
      cout << "\nAnswer:"; 
      string answer; 
      cin >> answer; 

//問題出在這裏。保持默認爲這個if語句,而忽略休息,所以它認爲答案始終是一個

  if (question == QUEST[randomQuest][0]) 
      { 
       if (answer == "A") 
       { 
        cout << "Correct. Proceed."; 
       } 

       else if (answer != "A") 
       { 
        cout << "Failure. Leave. Or, you know, try again."; 
       } 
      } 

      else if (question == QUEST[randomQuest][1]) 
      { 
       if (answer == "C") 
       { 
        cout << "Correct. Proceed."; 
       } 

       else if (answer != "C") 
       { 
        cout << "Failure. Leave. Or, you know, try again."; 
       } 
      } 

      else if (question == QUEST[randomQuest][2]) 
      { 
       if (answer == "D") 
       { 
        cout << "Correct. Proceed."; 
       } 

       else if (answer != "D") 
       { 
        cout << "Failure. Leave. Or, you know, try again."; 
       } 
      } 

      else if (question == QUEST[randomQuest][3]) 
      { 
       if (answer == "C") 
       { 
        cout << "Correct. Proceed."; 
       } 

       else if (answer != "C") 
       { 
        cout << "Failure. Leave. Or, you know, try again."; 
       } 
      } 

      else if (question == QUEST[randomQuest][4]) 
      { 
       if (answer == "D") 
       { 
        cout << "Correct. Proceed."; 
       } 

       else if (answer != "D") 
       { 
        cout << "Failure. Leave. Or, you know, try again."; 
       } 
      } 


     } 
+0

您是否嘗試過使用逐步調試器? – Dai

+0

仔細檢查您在if語句中使用的數組索引。仔細想想你會比較'問題'的價值。 –

回答

0

你沒有發佈完整的源代碼,所以我剛剛張貼的我會怎麼做這樣的例子。即使認爲它有更多的線,它更可讀的恕我直言。

#include <stdio.h> 
#include <vector> 
#include <string> 

struct Question 
{ 
    unsigned char answer; 
    std::string title; 
    std::vector<std::string> options; 
}; 

int main() 
{ 
    std::vector<Question> questions; 

    // Define the questions 
    Question questionOne; 
    Question questionTwo; 
    Question questionThree; 
    Question questionFour; 
    Question questionFive; 

    questionOne.answer = 'c'; 
    questionOne.title = "What course is this?"; 
    questionOne.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionOne.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionOne.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionOne.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 

    questionTwo.answer = 'a'; 
    questionTwo.title = "Who am I?"; 
    questionTwo.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionTwo.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionTwo.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionTwo.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 

    questionThree.answer = 'b'; 
    questionThree.title = "Are you actually reading this?"; 
    questionThree.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionThree.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionThree.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionThree.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 

    questionFour.answer = 'c'; 
    questionFour.title = "Will this program work?"; 
    questionFour.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFour.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFour.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFour.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 

    questionFive.answer = 'd'; 
    questionFive.title = "Where would I rather be?"; 
    questionFive.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFive.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFive.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
    questionFive.options.push_back("aaaaaaaaaaaaaaaaaaaaaaaaaaa"); 

    // Save them 
    questions.push_back(questionOne); 
    questions.push_back(questionTwo); 
    questions.push_back(questionThree); 
    questions.push_back(questionFour); 
    questions.push_back(questionFive); 

    // Change to a random question accordingly 
    for (auto& question : questions) 
    { 
     // Show question title 
     std::cout << question.title << std::endl; 

     // Show question options 
     for (auto& option : question.options) 
     { 
      std::cout << option << std::endl; 
     } 

     // Get the user input accordingly 
     unsigned char userInput = 0; 

     // Validate user input 
     if (userInput == question.answer) 
     { 
      std::cout << "Congratulations! Next question coming up..." << std::endl; 
     } 
     else 
     { 
      std::cout << "Wrong answer. Next question coming up..." << std::endl; 
     } 
    } 

    return 0; 
} 
+1

只有代碼和沒有解釋的答案不被認爲是一個好的答案。 – vishal

+0

@vishal評論,無論以任何方式漠視這個帖子作者問題的解決方案,甚至不被視爲一種幫助。他沒有發佈整個源代碼,但即使他這樣做了,我也不會去調試它,以便發現他忘了包含哪個括號或任何錯過的std :: cin或任何其他東西。隨意做到這一點,並幫助我們所有人。 –