C++ if ... then语句
所以我试图做一个简单的应用程序,测验用户。它会提出一个问题,用户回答1,2,3或4.然后,应用程序将采用该答案,如果正确,则会在最后显示的total_score中添加+1。一切看起来都对我有用,但是当我运行它并且到达if (q1_valid == false)
部分时,它跳过cout并运行goto,无论q1_valid是true还是false。C++ if ... then语句
#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();
}
我这里有几个技巧:
- 如果...则是有条件的,不是循环。对不起,这只是我有点挑剔。 ;)
- 永远不会使用goto。高级用法:只有在有充分的理由时才能使用goto。
- 测试布尔值时,不需要“== true”或“== false”。
- 看起来你还没有学会如何使用else语句。这将使您的程序更易于阅读,调试和理解。如上所述,括号也是必需的。
你不必绕语句括号中的如果,所以才有了第一条语句是有条件后。在这种情况下,这意味着“q1_valid = true;”无论答案是什么,它都会运行。
if (q1_answer == 4) {
q1_correct = false;
q1_valid = true;
}
您需要一个编辑器,通过缩进显示您。
Emacs会,例如
或者vim ;-) – 2011-05-27 21:40:38
@Fredrik:emacs的第一条规则是C-x M-c M-butterfly。 emacs的第二条规则是不要谈论vim。 – 2011-05-27 21:43:04
http://www.karakas-online.de/myLinuxTips/images/viman.png但我确实很喜欢xkcd的参考! – 2011-05-27 21:44:46
您需要使用括号:
if (q1_valid == false) {
cout << "Invalid answer." <<endl;
goto Question_1;
}
如果不使用斗拱,if
只执行第一条语句直接跟随它,如果if
条件评估为真。
我会说第一个陈述,而不是第一行。 – 2011-05-27 21:38:20
@Vlad:好点,固定。 – CanSpice 2011-05-27 22:53:17
不要忘记使用括号。
if语句的括号是必需的。
你有没有考虑使用switch语句:
switch (q1_answer){
case 1:
q1_correct = false;
q1_valid = true;
break;
case 2:
q1_correct = false;
q1_valid = true;
break;
case n:
//...
break;
}
'switch case'显然比@ h3half的代码中if语句的使用方式要好,但是应该注意的是,既不_really_好(最好只比较一次_variable_表示正确的答案,并且if这是不正确的,那么如果给定答案在有效答案的范围内,则只检查一次)。 – leftaroundabout 2011-05-27 21:46:30
@leftaroundabout这只是对有问题的代码的建议。这并没有改善它的逻辑。 – Secko 2011-05-27 21:49:52
用于下一次提示:反引号是主代码的报价。对于块引用代码,可以缩进四个空格或按下“{}”按钮。 – 2011-05-27 21:34:03
你使用C++多久了?你需要用花括号包装你的if语句。 – 2011-05-27 21:34:11
这是实际的代码吗?导致你的if似乎有很多陈述,但只有一个实际上与if相关,因为你不使用{} – 2011-05-27 21:35:16