我正在为我的班级编写一些代码。
我已经掌握了它的基础知识,但我在测试代码时遇到了一个问题。
我有一个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
语句表现得像这样?
答案 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.