即使输入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')
答案 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
,但仅使用getchar
,scanf
充满了陷阱。替换它:
char next;
...
scanf("%c", &next);
getchar();
用这个:
int next;
...
next = getchar();
答案 3 :(得分:0)
while (next !='n' || next!='N') is always true.
您可以像这样更改:
while (next !='n')
然后你输入n
,它就停止了。