把开关放在里面做...同时

时间:2011-05-28 17:32:09

标签: c++ switch-statement nested

所以我有一个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);
}

2 个答案:

答案 0 :(得分:5)

while内的条件是“意外”分配,而非比较。它需要阅读while (q5_valid == false)或更多惯用while (!q5_valid)

答案 1 :(得分:3)

这不是布尔表达式:

q5_valid = false

它将变量q5_valid设置为false并返回false。替换为:

!q5_valid

q5_valid == false

哪个是一样的。前者更易于阅读。