在阅读用户输入时,循环不会停止

时间:2018-05-09 13:01:59

标签: c logic

即使输入n或N,此代码也无法停止循环。

造成这种情况的原因是什么?

    char next = "";

    printf("Do u want continue\n");
    scanf("%c", &next);
    getchar();
    do
    {
        if (next=='y' ||next=='Y')
        {
            selection();
        }
        else
        {
            printf("invalid Please Enter again");
            scanf("%c", &next);
        }
    } while (next !='n'|| next!='N')

4 个答案:

答案 0 :(得分:4)

条件(next !='n'|| next!='N')始终为真。

如果next'n',则next!='N'为真,使整个表达式成立。同样,如果next'N',则next!='n'再次为真,使整个表达式成立。

您想要的是使用逻辑AND &&

} while (next !='n' && next!='N')

答案 1 :(得分:2)

您的while条件将始终评估为true。输入字符将始终为NOT' N'或者不是' n。因为它只是一个字符,所以它永远不会是两个中的一个。您需要确保它不是它们的必要条件。这是一个逻辑AND检查,而不是和OR检查。所以,相反,将条件更改为AND,又称next !== 'n' && next !== 'N',或者,如果您发现使用OR更有意义,则通过使用布尔逻辑转换!(next == 'n' || next == 'N'),以下条件等效于AND语句

干杯!

答案 2 :(得分:1)

除了dbush的回答是正确的:

  • char next = "";错了,应该是char next;
  • 请勿使用scanf,但仅使用getcharscanf充满了陷阱。

替换它:

char next;
...
scanf("%c", &next);
getchar();

用这个:

int next;
...
next = getchar();

答案 3 :(得分:0)

while (next !='n' || next!='N') is always true.

您可以像这样更改:

while (next !='n')

然后你输入n,它就停止了。