为什么我的switch语句打印case和default?

为什么我的switch语句打印case和default?,c,switch-statement,do-while,C,Switch Statement,Do While,如果输入say g,则会显示: #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.

如果输入say g,则会显示:

#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;
}
a. another: That wasn't a through f.
如果输入f,则它将按预期执行

That wasn't a through f. That wasn't a through f. 
程序终止

关于如何解决这个问题有什么建议吗?我试着查找了一段时间,得到的答案不是C,或者他们说你忘记休息了;陈述我对C也是新手,所以可能这是我没有注意到的,我还认为这可能是由于do-while循环的原因?感谢您抽出时间

scanf(“%c”和&ch)
一次只能读取一个字符。如果键入一个字母,然后按Enter键,则提供两个字符:字母和换行符(U+000A,
'\n'

如果要忽略换行符,一个选项是显式检查它们:

f. Goodbye.

您也可以尝试使用此方法

scanf(“%c\n”和&ch)


它将自动吃掉多余的\n个字符

问题在于
scanf(“%c”,&ch)通过在其中添加空格进行修复:
scanf(“%c”和&ch)扫描不会将空格与任何其他字符区别对待。它将为
a
执行一次循环,然后再为换行执行一次。感谢您对scanf的解释。我不知道它是这样工作的。案例“\n”:中断;和scanf(“%c”和“ch”);两者同等工作
case '\n':
    break;