c++ - 我一直收到错误 "‘else’ 而没有之前的 ‘if’“并且不知道为什么

标签 c++ if-statement compiler-errors

几天前我开始使用 C++,每当我写一个 else if 语句时,我总是得到错误 ‘else’ without a previous ‘if’。这是我的代码(顺便说一句,我正在尝试在用户之间制作剪刀石头布。我最终想从生活大爆炸中添加蜥蜴和斯波克。):

/*
This program will play rock paper scissors with the user
*/


#include <iostream>
#include <stdlib.h>

int main() {


  srand(time(NULL));


  int computer = rand() % 3 + 1;


  int user = 0;

  std::cout << "===========================\nrock paper scissors!\n===========================\n";
  std::cout << "1) ROCK\n";
  std::cout << "2) PAPER\n";
  std::cout << "3) SCISSORS\n";

  std::cout << "shoot! \n";
  std::cin >> user;
/*
if (user == 1) {
  std::cout << "You pick rock!\n";
}
else if (user == 2) {
  std::cout << "You pick paper!\n";
}
else if (user == 3) {
  std::cout << "You picked scissors!\n";
}
else {
  std::cout << "Invalid input, please select a number between 1 and 3\n";
*/
if (computer == 1)
  std::cout << "CPU picks Rock!";
else if (computer == 2)
  std::cout << "CPU picks Paper!";
else
  std::cout << "CPU picks Scissors!";
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)
  std::cout << "You pick paper!\n";
    if (computer == 2)
      std::cout << "You both tie!\n";
    else if (computer == 3)
      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 == 3)
  std::cout << "You picked scissors!\n";
    if (computer == 3)
      std::cout << "You both tie!\n";
    else if (computer == 1)
      std::cout << "You lose. You really just aren't good at rock paper scissors lizard spock\n";
    else
      std::cout << "You win!\n";
else
  std::cout << "Invalid input, please select a number between 1 and 3 (No Spaces please!)\n";
}






我尝试添加和删除大括号。 (虽然我听说它们是可选的)我尝试将 else if 切换到 if else 因为我总是忘记使用哪个。我还尝试检查以确保我没有使用任何分号,因为这似乎总是一个大问题。不过,我仍在学习,而且我对 C++ 还很陌生,所以请放轻松。

最佳答案

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

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

只有一个语句时括号是可选的,例如

if (foo) {
    std::cout << blabla;
}

// same as 

if (foo) std::cout << blabla;

但是一旦有更多,括号就会有所不同。或者换句话说,下面两个是等价的:

if (foo) 
    std::cout << blabla;
    std::cout << whoops;

// is the same as 

if (foo) { 
    std::cout << blabla; 
}
std::cout << whoops;

最好总是写括号,即使在可以省略的情况下也是如此,否则,添加或删除一行需要重构整个代码块。

关于c++ - 我一直收到错误 "‘else’ 而没有之前的 ‘if’“并且不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74602815/

相关文章:

mysql - MySQL 有没有办法从 information_schema 执行结果集

c++ - 错误 C4996 : 'gethostbyaddr' : Use getnameinfo() or GetNameInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

c++ - 多线程返回未处理的异常用于存储信息

python - 编写 if 语句以避免某些列表项的更好方法是什么?

javascript - 空调功能

c++ - 将 VS 2012 迁移到 VS 2015 后 C++ 项目中的 Xmemory 错误

C 编译错误指针

java - Android NDK - 构建未找到 NDK 包含,例如 <Queue>,

c++ - 需要解释 - 析构函数调用 - C++ - 构造函数中的异常

javascript - iOS 5 - 编译用于调试的私有(private) API - 特别是 _enableRemoteInspector