读取用户输入时循环不会停止
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
而只使用getchar
,scanf
充满陷阱。
替换这个:
char next;
...
scanf("%c", &next);
getchar();
用这个:
int next;
...
next = getchar();
【讨论】:
【参考方案4】:while (next !='n' || next!='N') is always true.
你可以像这样简单地改变它:
while (next !='n')
然后你输入n
,它就停止了。
【讨论】:
以上是关于读取用户输入时循环不会停止的主要内容,如果未能解决你的问题,请参考以下文章