我正在写一段代码,在我的代码的一部分中,我使用了C语言的switch语句。如果我按n,它就会正确退出,如果我按y,它会无限循环默认语句,直到我按下control。c。我到底做错了什么?一直在更改while语句,但找不到正确的语句。
int main()
{
char ans;
printf("DO you want to continue?");
scanf("%c", &ans);
do
{
switch(ans)
{
case 'y':
some stuff...
printf("DO you want to continue?");
scanf("%c", &ans);
break;
case'n':
printf("BYE");
break;
default:
printf("error, you must enter y or n");
continue;
}
}
while (ans!='n');
return 0;
}发布于 2014-09-16 09:20:05
按enter键时,换行符\n将添加到输入流中。您的代码没有预料到这一点,因为switch(ans)只处理y、n或“所有其他内容”(包括换行符)。
要解决此问题,请将格式字符串改为" %c",从而允许scanf忽略前面的任何空格,例如
scanf(" %c", &ans);
// ^ space character inserted here我认为将scanf调用移到循环内部会更有意义,如下所示:
int main()
{
char ans;
do
{
printf("DO you want to continue?");
if (scanf(" %c", &ans) != 1)
break;
switch(ans)
{
case 'y':
// some stuff...
break;
case 'n':
printf("BYE");
break;
default:
printf("error, you must enter y or n");
continue;
}
}
while (ans!='n');
}不要忘记总是检查scanf()的结果。它将返回成功扫描的项目数(在本例中,您希望它返回1)。如果它返回0或负数,则说明发生了另一个问题。
https://stackoverflow.com/questions/25859287
复制相似问题