为什么我的switch语句打印case和default?
如果输入say g,则会显示:为什么我的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.
#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;