我正在编写一段代码,在我的代码的一部分中,我使用的是C语言的switch语句。如果我按n它正确退出如果我按y它将无限循环默认语句直到我按下控制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;
}
答案 0 :(得分:1)
按Enter键时,换行符\n
将添加到输入流中。您的代码不会预料到这一点,因为switch(ans)
仅处理y
,n
或“其他所有内容”(包括换行符)。
要解决此问题,请通过将格式字符串更改为scanf
来允许" %c"
忽略任何前面的空格,例如
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或负数,则发生另一个问题。