Положить переключатель внутри do ... в то время как - PullRequest
2 голосов
/ 28 мая 2011

Итак, у меня есть оператор do ... while, который должен повторяться, если пользователь не введет одну из четырех вещей. Эти четыре вещи имеют разрыв, и они устанавливают переменную, которая управляет while, в true, где по умолчанию - false. Если пользователь не введет один из четырех ответов, переменная останется ложной, что должно привести к выполнению команды do ... при запуске снова. Это не так.

#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 ]

5 голосов
/ 28 мая 2011

Условие внутри while является «случайным» назначением, а не сравнением.Нужно читать while (q5_valid == false) или более идиоматических while (!q5_valid).

3 голосов
/ 28 мая 2011

Это не логическое выражение:

q5_valid = false

Устанавливает для переменной q5_valid значение false, а также возвращает false.Замените его на:

!q5_valid

или

q5_valid == false

, которые одинаковы.Первое лучше для удобочитаемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...