我不断收到错误“'else' without previous 'if'”并且不知道为什么

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。这是我的代码(顺便说一句,我正在尝试在用户之间制作石头剪刀布。我想最终也从大爆炸节目中添加蜥蜴和斯波克。):

\n
/*\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

for*_*818 7

您的代码中的一些有问题的行:

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 (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)

最好总是写括号,即使可以省略它们,因为否则,添加或删除一行需要重构整个代码块。