代码中的解析错误:expected'; '之前'''令牌 - 是什么导致这个?

时间:2011-06-27 23:56:14

标签: c++

我得到的错误是error: expected ' ; ' before ' { ' token

我尝试在;之后以及if (thisisanumber==5)之后添加else (thisisanumber!=5)来修复代码。虽然这解决了第一个错误,但它会产生另一个错误error: ' else ' without a previous ' if '。我真的很想知道我在编写代码时犯了什么错误,谢谢。

这是我的代码:

#include <iostream>

using namespace std;

int main()
{
    int thisisanumber;

    cout<<"Whats the Password?: ";
    cin>> thisisanumber;
    cin.ignore();
    if (thisisanumber==5) {
        cout<<"You've discovered the password! Wow, you're a genious you should be proud./n";
        }
    else (thisisanumber!=5) {
        cout<<"You've failed in knowing the password and therefore cannot enter, leave and do not come back. Goodbye!/n";
        }
    cin.get();
}

3 个答案:

答案 0 :(得分:5)

您错过了关键字if

else if (thisisanumber!=5) {
     ^^

或者,由于与thisisanumber == 5相反的条件是thisisanumber 5,因此您不需要条件:

else {

答案 1 :(得分:3)

您不需要其他条件,因为只有两种情况 - 只需使用else { ... },它就会捕获thisisanumber==5false的所有情况。

if语句的结构是:

if (condition) { ... }

else if (another condition) { ... }
// ... more conditions

else { ... all cases in which no previous condition matched end up here  ... } 

...但else ifelse部分始终是可选的。

答案 2 :(得分:2)

编译器会看到以下内容:

else (thisisanumber!=5) {

并思考自己:

“好的,这是else。是下一个令牌if吗?没有。好的,所以这是一个else子句,接下来就是在else-case中做什么。是下一个令牌{?没有。好的,所以在else-case中,我们执行一个语句而不是一个块。下一个令牌是(吗?是的。好的,所以我们的声明包含在括号... [插入此处:用于解释括在括号中的表达式的思考过程的其余部分]好的,有匹配的)。哇。现在让我们为这句话匹配; ......等等,这是什么?A {!那不对。“

编译器从左到右一次读取一个代码。它不会在人类理解的逻辑意义上报告错误,实际上是错误。它报告了一个错误,通过从左到右一次读取一个令牌代码,它首先能够检测到出现了问题。

else (thisisanumber!=5);是合法的。这意味着“如果数字不等于5(因为if测试失败),那么检查数字是否不等于5,并且不对该比较的结果做任何事情”。毫无意义,但合法。写else if (thisisanumber!=5) {...}也是合法的,这可能就是你的意思。这意味着“如果数字不等于5(因为if测试失败),并且数字不等于5,那么在{}”内执行此操作。但这是多余的:假设某些东西不等于5,则保证不等于5,因此指定测试两次是没有意义的。所以我们应该写else {...}

“else”实际上是“否则”的缩写词,并且在C ++中也有这个目​​的。