虽然循环终止不正确

时间:2017-05-03 01:58:43

标签: c++

即使没有输入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;
}

3 个答案:

答案 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。