2016-11-13 107 views
1
#include <stdio.h> 

int main(void) 
{ 
    char ch; 
    int end=0; 
    printf("\nPick a letter a through f. (f ends the program)"); 
    do 
    { 
     scanf("%c", &ch); 

     switch (ch) { 
    case 'a': 
     printf("a. another: "); 
     break; 
    case 'b': 
     printf("b. another: "); 
     break; 
    case 'c': 
     printf("c: another "); 
     break; 
    case 'd': 
     printf("d. another: "); 
     break; 
    case 'e': 
     printf("e. another: "); 
     break; 
    case 'f': 
     printf("f. Goodbye. "); 
     end=1; 
     break; 
    default: 
     printf("That wasn't a through f. "); 
     break; 
     } 
    } while (end == 0); 
    return 0; 
} 

所以,如果你輸入一個,然後它會說:爲什麼我的switch語句打印一個case和default?

a. another: That wasn't a through f. 

如果輸入說g然後它會說:

That wasn't a through f. That wasn't a through f. 

如果您輸入f然後它會做如預期

f. Goodbye. 

程序終止。

有關如何解決此問題的任何提示?我嘗試過查找一段時間,我得到的答案不是C,或者他們說你忘記了休息時間;聲明。我也是C新手,所以也許這很明顯,我沒有注意到,我也認爲這可能是由於do while while循環造成的。感謝您的時間

+0

問題出在'scanf(「%c」,&ch);'通過在其中添加空格修復:'scanf(「%c」,&ch);' – artm

+0

在格式說明符中沒有空格的scanf不會將任何不同於任何其他字符的空格對待。它爲'a'執行一次循環,然後再次執行換行 – Tibrogargan

+0

感謝您對scanf的解釋。我不知道它是這樣工作的。案例'\ n':break;和scanf(「%c」,&ch);均可以同樣工作 – jonnyboy1555

回答

3

scanf("%c", &ch)一次讀取一個字符。如果您正在輸入一個字母然後按Enter,則您提供了兩個字符:字母和換行符(U + 000A,'\n')。

如果你想忽略換行符,一個選項是顯式地檢查他們:

case '\n': 
    break; 
0

您也可以嘗試使用此方法..

scanf("%c\n", &ch);

它會自動吃多餘的\ n字符

相關問題