2011-05-28 23 views
2

所以我有一個do ... while語句,應該重複,除非用戶輸入四件事之一。這四件事情有一個突破,他們將控制while的變量設置爲true,其中默認值爲false。如果用戶沒有輸入四個答案中的任何一個,那麼變量將保持爲假,這應該使...再次開始。它沒有。把開關放在做...而

#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    int q5_answer = 1; 
    int q5_answerU; 
    int total_score; 
    bool q5_valid = false; 

    //Question_5: 
    do 
    { 
     cout << "Question 5 (#1 is correct)" <<endl; 
     cout << "1.) Answer 1" <<endl; 
     cout << "2.) Answer 2" <<endl; 
     cout << "3.) Answer 3" <<endl; 
     cout << "4.) Answer 4" <<endl; 
     cin >> q5_answerU; 

     switch (q5_answerU) 
     { 
     case 1: 
      cout << "Correct!" <<endl; 
      q5_valid = true; 
      (total_score = total_score + 1); 
      break; 
     case 2: 
      cout << "Incorrect" <<endl; 
      q5_valid = true; 
      break; 
     case 3: 
      cout << "Incorrect" <<endl; 
      q5_valid = true; 
      break; 
     case 4: 
      cout << "Incorrect" <<endl; 
      q5_valid = true; 
      break; 
     default: 
      cout << "Invalid answer" <<endl; 
     } 
    } while (q5_valid = false); 
} 

回答

5

while裏面的條件是一個「偶然」的分配,而不是比較。它需要閱讀while (q5_valid == false)或更多的慣用while (!q5_valid)

+0

打我吧! – 2011-05-28 17:37:19

+0

或者使用'while(false == q5_valid)' - 這適用於其他測試,而不是布爾值('42!= answer'),編譯器會自動捕獲意外的任務 – sehe 2011-05-28 17:39:23

+0

@sehe:更好地打開編譯器警告並觀察請他們。 ;) – Xeo 2011-05-28 17:43:10

3

這不是一個布爾表達式:

q5_valid = false 

它設置可變q5_valid到false和也返回false

!q5_valid 

q5_valid == false 

哪些是相同的:通過更換。前者更易於閱讀。