循环终止不正确时



我的 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。

最新更新