2016-11-13 175 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字符

相关问题