读取用户输入时循环不会停止

Posted

技术标签:

【中文标题】读取用户输入时循环不会停止【英文标题】:Looping won't stop when reading user input 【发布时间】:2018-10-19 14:44:47 【问题描述】:

即使我输入 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')

【问题讨论】:

【参考方案1】:

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

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

你想要在这里使用逻辑与&&

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

【讨论】:

谢谢,但我仍然面临另一个问题。当我输入 n 时,它将在关闭前循环到第一个 else 语句。我对此一无所知。该程序将逐步读取。那么我该如何解决呢? @WangLiangwei 你需要加一个额外的检查,看看结果是'n'还是'N',如果不是才再次提示。 @WangLiangwei 很高兴我能帮上忙。如果您觉得有用,请随时 accept this answer。【参考方案2】:

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

干杯!

【讨论】:

【参考方案3】:

除了 dbush 的回答是正确的:

char next = "";错了,应该是char next; 不要使用scanf而只使用getcharscanf充满陷阱。

替换这个:

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

用这个:

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

【讨论】:

【参考方案4】:
while (next !='n' || next!='N') is always true.

你可以像这样简单地改变它:

while (next !='n')

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

【讨论】:

以上是关于读取用户输入时循环不会停止的主要内容,如果未能解决你的问题,请参考以下文章

如何循环列表,直到列表中的所有项目都与用户输入匹配,然后在 python 中使用 Bingo 消息停止循环

在使用读取(bash)的while循环中禁用用户输入

用Python 实现将用户输入的数字相加求和

为啥我可以从 STDOUT 读取并获取用户的终端输入?

关于Javascript如何在input停止输入时响应

hasNextInt不会返回false并退出循环