为什么我的switch语句打印一个case和default?
问题描述:
#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循环造成的。感谢您的时间
答
scanf("%c", &ch)
一次读取一个字符。如果您正在输入一个字母然后按Enter,则您提供了两个字符:字母和换行符(U + 000A,'\n'
)。
如果你想忽略换行符,一个选项是显式地检查他们:
case '\n':
break;
答
您也可以尝试使用此方法..
scanf("%c\n", &ch);
它会自动吃多余的\ n字符
问题出在'scanf(“%c”,&ch);'通过在其中添加空格修复:'scanf(“%c”,&ch);' – artm
在格式说明符中没有空格的scanf不会将任何不同于任何其他字符的空格对待。它为'a'执行一次循环,然后再次执行换行 – Tibrogargan
感谢您对scanf的解释。我不知道它是这样工作的。案例'\ n':break;和scanf(“%c”,&ch);均可以同样工作 – jonnyboy1555