c++中没有先前if错误的Else

else without previous if error in c++

本文关键字:if 错误 Else c++      更新时间:2023-10-16

有人能解释一下我在这个代码中的上述错误吗?我在CodeBlocks中得到它,当我使用Visual Studio时,它说期望一个语句。非常感谢。

#include <iostream>
    using namespace std;
    int main()
    {
        char fruits;
        float sales;
        cout << " Enter the First letter of the Fruit's name : ";
        cin >> fruits;
        cout << " Enter the amount of sales : ";
        cin >> sales;

        if (fruits == 'A' || fruits == 'a')
            cout << " You are selling Apples ";
            cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";
        else if (fruits == 'P' || fruits == 'p')
            cout << " You are selling Pears";
            cout << " Your commission is " << sales*(5 / 100) << " rupees. ";
        else if (fruits == 'O' || fruits == 'o')
            cout << " You are selling Oranges ";
            cout << " Your commission is " << sales*(5.5 / 100) << " rupees. ";
        else if (fruits == 'G' || fruits == 'g')
            cout << " You are selling Grapes ";
            cout << " Your commission is " << sales*(6 / 100) << " rupees. ";
        else
            cout << " Invalid Entry. Try again. ";

        return 0;
    }

您需要在if语句中使用大括号,像这样

if (fruits == 'A' || fruits == 'a') {
        cout << " You are selling Apples ";
        cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";
} else if (fruits == 'P' || fruits == 'p') {
} // and so on

因为否则您的if子句将只对下一行有效,这将使您的逻辑看起来像这样:

if () 
    cout << " I am only getting executed if the above 'if' statement is true ";
cout << " I will always be executed, no matter what ";

并且,通过这样做,您的else语句将在代码中间松散,导致您正在获得

的编译错误。
if () 
    cout << " I am only getting executed if the above 'if' statement is true ";
cout << " I will always be executed, no matter what ";
else // but, else what? There is no 'if' behind me

这是因为您有一个没有封闭花括号的多行块。c++解释这个

if (fruits == 'A' || fruits == 'a')
    cout << " You are selling Apples ";
    cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";

:

if (fruits == 'A' || fruits == 'a')
    cout << " You are selling Apples "; // Protected by `if`
// Not protected by `if` !!!
cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";

c++编译器忽略缩进;这就是为什么当您在第二个cout之后放置else时,它被视为没有前面的ifelse

要解决这个问题,将所有受if保护的块都用花括号括起来。即使在不需要花括号的情况下,养成这样做的习惯也是一个好主意,因为if保护单个语句。

c++中,代码

if (fruits == 'A' || fruits == 'a')
    cout << " You are selling Apples ";
    cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";

被解释为

if (fruits == 'A' || fruits == 'a') cout << " You are selling Apples ";
cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";

换句话说,只有第一个语句由if语句保护。第二条语句无条件执行。这解释了您得到的错误-您拥有的else if与先前的if语句不匹配。

要解决这个问题,在if语句的主体周围添加大括号:

if (fruits == 'A' || fruits == 'a') {
    cout << " You are selling Apples ";
    cout << " Your commission is " << sales*(4.5 / 100) << " rupees. ";
}

一般来说,缩进在c++中是不相关的,所以要小心确保你的缩进符合你预期的意图。

希望这对你有帮助!