我的 while 循环终止时遇到问题,即使没有输入 5 或 6。谢谢!
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;
}
好的。你遇到了一些误解,C语言中的疣加剧了这种误解。
==
运算符仅比较值,不会在列表中查找。它返回 1 或 0,分别表示真或假。
|
运算符是"二进制或"运算符。它执行逐位比较两个数字的值的操作(这称为逐位操作)。如果给定数字中的相同位为 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 以外的数字! :)
你的if语句没有做你认为它做的事情。试试这个:
if(num == 5 || num == 6)
C++中的"Or"是||而不是一个小节。
我想你的意思是这样说:if(num == 5 || num == 6)
作为你的条件|| 6
是一个非零值,因此每次的计算结果都是true。