簡體   English   中英

switch語句創建無限循環

[英]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)僅處理yn或“其他”(包括換行符)。

要解決此問題,請允許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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM