类函数用完了循环

时间:2015-10-25 13:50:05

标签: c++

我正在为我的班级编写一些代码。

我已经掌握了它的基础知识,但我在测试代码时遇到了一个问题。

我有一个if语句正在运行Yes的选择,无论实际用户输入如何。我确定这是一件我想念的小事,但我可以弄清楚是什么。任何帮助将不胜感激。

我仔细检查了定义这些函数的类Calendar中的括号。

int main()
{
    Calendar adminCal;
    char selection;

    cout << "Would you like to set the date? (Y/N)" << endl;
    cin >> selection;

    if (selection = 'y' || 'Y')
    {
        adminCal.setDate();
        adminCal.Display();
    }
    else
        adminCal.Display();

return 0;
}

问题:

为什么if语句表现得像这样?

1 个答案:

答案 0 :(得分:3)

你应该改变

if (selection = 'y' || 'Y')

if (selection == 'y' || selection == 'Y')

请注意selection = 'y'是一个赋值运算符,而不是您期望的关系运算符。当它用于if语句时,它将始终为true,因为赋值运算符返回的char值(此处为y)是非零值。表达式Y也将始终为true

从标准4.12 $ 1布尔转换[conv.bool]

  

算术,无范围枚举,指针或指针的prvalue   成员类型可以转换为bool类型的prvalue。零   转换value,null指针值或null成员指针值   为假;任何其他值都转换为true。对于   直接初始化(8.5),类型为std :: nullptr_t的prvalue可以   转换为bool类型的prvalue;结果值为false。

BTW:不要忽略编译器生成的警告消息,它试图帮助您找到这种错误。这是clang生成的警告消息:

Warning(s):

source_file.cpp:10:25: warning: use of logical '||' with constant operand [-Wconstant-logical-operand]
    if (selection = 'y' || 'Y')
                        ^  ~~~
source_file.cpp:10:25: note: use '|' for a bitwise operation
    if (selection = 'y' || 'Y')
                        ^~
                        |
source_file.cpp:10:19: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
    if (selection = 'y' || 'Y')
        ~~~~~~~~~~^~~~~~~~~~~~
source_file.cpp:10:19: note: place parentheses around the assignment to silence this warning
    if (selection = 'y' || 'Y')
                  ^
        (                     )
source_file.cpp:10:19: note: use '==' to turn this assignment into an equality comparison
    if (selection = 'y' || 'Y')
                  ^
                  ==
2 warnings generated.