C++ if ... then语句

h3h*_*alf 1 c++

所以我正在尝试制作一个简单的应用程序来测试用户.它会询问一个问题并且用户回答1,2,3或4.然后应用程序接受该答案,如果正确,则将total_score添加+1,最后将显示该值.一切看起来都很合理,但是当我运行它并且我到达该if (q1_valid == false)部分时它会跳过cout并运行goto,无论q1_valid是true还是false.

#include <iostream>

using namespace std;

int main()
{
    int q1_answer;
    int total_score;
    bool q1_correct;
    bool q1_valid;

    Question_1:
    cout << "Question 1 (#3 is correct)" << endl;
    cout << "1.) Answer 1" <<endl;
    cout << "2.) Answer 2" <<endl;
    cout << "3.) Answer 3" <<endl;
    cout << "4.) Answer 4" <<endl;
    cin >> q1_answer;

    if (q1_answer == 1)
    q1_correct = false;
    q1_valid = true;

    if (q1_answer == 2)
    q1_correct = false;
    q1_valid = true;

    if (q1_answer == 3)
    q1_correct = true;
    q1_valid = true;

    if (q1_answer == 4)
    q1_correct = false;
    q1_valid = true;

    if (q1_valid == false)
    cout << "Invalid answer." <<endl;
    goto Question_1;

    if (q1_correct == true)
    cout << "Correct!" <<endl;
    (total_score + 1);
    goto Question_2;

    if (q1_correct == false)
    cout << "Incorrect." <<endl;
    goto Question_2;

    if (q1_valid == false)
    goto Question_1;

    Question_2:
    cout<< "Q2" <<endl;
cin.ignore();
cin.ignore();
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ard 5

我在这里有一些提示:

  1. 如果...则是条件,而不是循环.对不起,那只是我有点挑剔.;)
  2. 永远不会永远使用goto.高级用法:只有在有充分理由的情况下才使用goto.
  3. 测试布尔值时,不需要"== true"或"== false".
  4. 看起来你还没有学会如何使用else语句.这将使您的程序更容易阅读,调试和理解.
  5. 如上所述,括号也是必要的.

  • 6.变量未定义.除非C++默认布尔值为'false',否则可能会导致代码出现问题. (2认同)
  • @ h3half,你可以在同一行声明和定义变量(尝试`bool q1_correct = false`),尝试给它们一个默认值是一个很好的做法.这样,如果重新安排事物,则没有代码路径,其中值未定义. (2认同)