即使没有输入5或6,我的while循环终止也遇到了问题。谢谢!
int main() {
char choice;
int num = 0;
bool quit = false;
while (!quit)
{
std::cin>>num;
std::cout << num << '\n';
if(num == 5 || 6)
{
quit = true;
}
}
return EXIT_SUCCESS;
}
答案 0 :(得分:1)
好的。你会遇到一些误解,加上C语言中的疣会加剧。
==
运算符仅比较值,不会查看列表。它返回1或0,分别表示真或假。
|
运算符是“binary-or”运算符。它执行逐位比较两个数值的操作(这称为逐位操作)。如果给定数字中的任何一个相同位为1,则|
将最终数字中的位设置为1。
0b00 | 0b00 -> 0b0000
0b10 | 0b00 -> 0b0010
0b00 | 0b10 -> 0b0010
0b10 | 0b11 -> 0b0011
||
运算符是“逻辑 - 或”运算符,如果其给定表达式中的任何一个产生1,则返回1,表示为true。如果左表达式产生1,则不会执行正确的(这称为短路)。
但是,当他们最初创建C时,他们做了一些困扰该语言的事情。他们使==
绑定比操作顺序(也称为运算符优先级)更紧密于|
。这意味着( 1 == 2 | 3 )
并不意味着“将1与二进制或2和3的结果进行比较的结果”,而是指“取二进制的结果或(比较1和2的结果) )和3“。
这意味着( ( 1 == 2 ) | 3 )
,其中( 1 == ( 2 | 3 ) )
是大多数人在意识到这种奇怪之前所期望的。
所有这些合在一起,你的if语句意味着:
if ( num == 5 ) | 6:
quit()
对于5或6以外的数字,很可能会退出! :)
答案 1 :(得分:0)
您的if语句没有按照您的想法执行。试试这个:
if(num == 5 || num == 6)
C ++中的“或”是||不是一个酒吧。
答案 2 :(得分:-2)
我认为您的意思是:if(num == 5 || num == 6)
因为您的条件|| 6
是非零值,因此每次评估为true。