[英]switch statement creating infinite loop
我正在編寫一段代碼,在代碼的一部分中,我使用的是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;
}
當您按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或負數,則發生了另一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.