Tra*_*mes 2 c++ if-statement compiler-errors
几天前我开始使用 c++,每当我编写 else if 语句时,我总是会收到错误\xe2\x80\x98else\xe2\x80\x99 without a previous \xe2\x80\x98if\xe2\x80\x99
。这是我的代码(顺便说一句,我正在尝试在用户之间制作石头剪刀布。我想最终也从大爆炸节目中添加蜥蜴和斯波克。):
/*\nThis program will play rock paper scissors with the user\n*/\n\n\n#include <iostream>\n#include <stdlib.h>\n\nint main() {\n\n\n srand(time(NULL));\n\n\n int computer = rand() % 3 + 1;\n\n\n int user = 0;\n\n std::cout << "===========================\\nrock paper scissors!\\n===========================\\n";\n std::cout << "1) ROCK\\n";\n std::cout << "2) PAPER\\n";\n std::cout << "3) SCISSORS\\n";\n\n std::cout << "shoot! \\n";\n std::cin >> user;\n/*\nif (user == 1) {\n std::cout << "You pick rock!\\n";\n}\nelse if (user == 2) {\n std::cout << "You pick paper!\\n";\n}\nelse if (user == 3) {\n std::cout << "You picked scissors!\\n";\n}\nelse {\n std::cout << "Invalid input, please select a number between 1 and 3\\n";\n*/\nif (computer == 1)\n std::cout << "CPU picks Rock!";\nelse if (computer == 2)\n std::cout << "CPU picks Paper!";\nelse\n std::cout << "CPU picks Scissors!";\nif (user == 1)\n std::cout << "You pick rock!\\n";\n if (computer == 1)\n std::cout << "You both tie!\\n";\n else if (computer == 2)\n std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\\n";\n else\n std::cout << "You win!\\n";\nelse if (user == 2)\n std::cout << "You pick paper!\\n";\n if (computer == 2)\n std::cout << "You both tie!\\n";\n else if (computer == 3)\n std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\\n";\n else\n std::cout << "You win!\\n";\nelse if (user == 3)\n std::cout << "You picked scissors!\\n";\n if (computer == 3)\n std::cout << "You both tie!\\n";\n else if (computer == 1)\n std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\\n";\n else\n std::cout << "You win!\\n";\nelse\n std::cout << "Invalid input, please select a number between 1 and 3 (No Spaces please!)\\n";\n}\n\n\n\n\n\n\n
Run Code Online (Sandbox Code Playgroud)\n我尝试添加和删除大括号。(虽然我听说它们是可选的)我尝试将 else if 切换为 if else 因为我总是忘记使用哪一个。我还尝试检查以确保我没有使用任何分号,因为这似乎始终是一个大问题。不过我仍在学习中,而且我对 C++ 很陌生,所以对我宽容点。
\n您的代码中的一些有问题的行:
Run Code Online (Sandbox Code Playgroud)if (user == 1) std::cout << "You pick rock!\n"; if (computer == 1) std::cout << "You both tie!\n"; else if (computer == 2) std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\n"; else std::cout << "You win!\n"; else if (user == 2)
现在用意图来说明这是如何解析的:
if (user == 1)
std::cout << "You pick rock!\n";
if (computer == 1)
std::cout << "You both tie!\n";
else if (computer == 2)
std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\n";
else
std::cout << "You win!\n";
else if (user == 2) // <-------------------------
Run Code Online (Sandbox Code Playgroud)
当只有一条语句时,括号是可选的,例如
if (foo) {
std::cout << blabla;
}
// same as
if (foo) std::cout << blabla;
Run Code Online (Sandbox Code Playgroud)
但一旦有更多,括号就会产生影响。或者换句话说,以下两个是等效的:
if (foo)
std::cout << blabla;
std::cout << whoops;
// is the same as
if (foo) {
std::cout << blabla;
}
std::cout << whoops;
Run Code Online (Sandbox Code Playgroud)
最好总是写括号,即使可以省略它们,因为否则,添加或删除一行需要重构整个代码块。