C 循环赢了';读取用户输入时不要停止
即使输入n或n,此代码也无法停止循环 这是什么原因造成的C 循环赢了';读取用户输入时不要停止,c,logic,C,Logic,即使输入n或n,此代码也无法停止循环 这是什么原因造成的 char next = ""; printf("Do u want continue\n"); scanf("%c", &next); getchar(); do { if (next=='y' ||next=='Y') { selection(); } else {
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')
除了dbush正确的答案外:
错误,下一步应该是charnext=”“
char代码>
- 不要使用
,只使用scanf
,getchar
充满陷阱scanf
char next;
...
scanf("%c", &next);
getchar();
为此:
int next;
...
next = getchar();
有条件的(next!=“n”| next!=“n”)
始终为真
如果next
是'n'
则next!='N'
为true使整个表达式为true。类似地,如果next
是'N'
,则next!='n'
再次为真,使整个表达式为真
这里需要使用逻辑AND和&&
:
} while (next !='n' && next!='N')
您的while条件将始终计算为true。输入字符将始终不是“N”或不是“N”。因为它只是一个字符,所以它永远不会是两个字符中的一个。相反,你需要确保不是他们两个。这是逻辑AND检查,而不是AND或检查。因此,相反,将该条件更改为AND,又称为next!='下一步!=='N',或者,如果您发现使用或更有意义,则通过使用布尔逻辑转换,以下条件等价于AND语句
!(next=='n'| | next=='n')
干杯
while (next !='n' || next!='N') is always true.
您可以这样简单地更改它:
while (next !='n')
然后你输入
n
,它停止了。谢谢你,但我仍然面临另一个问题。当我输入n时,它将在关闭前首先循环到else语句。我对此一无所知。程序将一步一步地读取。那么我如何解决它呢?@WangLiangwei您需要添加一个额外的检查,看看结果是'n'
还是'n'
,如果不是,只会再次提示。@WangLiangwei很高兴我能提供帮助。如果你觉得它有用的话,请随意使用。