答案 0 :(得分:5)
scanf()
函数在尝试解析字符以外的其他内容之前会自动删除空格。
字符格式(%c
,%[…]
,%n
)是例外,它们不会删除空格。
在您的情况下,您必须跳过前导白色间距,才能进行更改
scanf("%c", &ch);
到
scanf(" %c", &ch);
^ Note the space
答案 1 :(得分:2)
使用scanf
,在您按下某个键后,您需要点击“输入”。这会在输入流中插入两个字符 - 您按下的字符和换行符\n
(可能还有\r
,回车符。)
为了演示,如果输入“a enter”,则输入流看起来像
a\n
如果输入“a b c d enter”,则输入流如下所示:
abcd\n
循环的第一次迭代将读取您输入的字符,下一次将读取换行符(这不是case
中的那个字符,因此点击default
语句。< / p>
要读取没有换行符的单个字符,请考虑getchar
,或者只考虑另外两个case
来捕捉换行符和回车符,并且在任何一种情况下都不执行任何操作(但请记住这将“窃取”你的循环的一些有用的迭代。)
答案 2 :(得分:0)
你必须使用scanf(" %c", &ch);
来消除所有空格,当使用%s时你不需要空格。
答案 3 :(得分:0)
scanf("%c", &ch);
语句要求您按Enter键。这会在输入流中插入newline \n
字符。在迭代期间从输入流中读取\ n字符时,将执行默认的switch-case。
由于只读取一个字符,您可以考虑使用getchar
来避免这种情况。或者,您可以在一行中输入字符串,然后输入key,例如:+++---***+
或者您可以添加另一个开关案例来处理换行符。
答案 4 :(得分:-2)
更改
scanf("%c", &ch);
到
ch=getche();
然后它将正常工作,您不必在每次输入后按Enter键。