所以我创建了这个小程序来代表我的问题。运行程序输入'a'按ENTER键。
C代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char o;
while(1)
{
printf("> ");
scanf("%c",&o);
switch(o)
{
case 'a' :
printf("%c\n",o);
break;
case 'q' :
return 0;
}
}
}
输出是:
> a
a
> > *(waiting for input)*
我的预期是:
> a
a
> *(waiting for input)*
请给我一些建议如何解决我的问题。谢谢。
答案 0 :(得分:3)
扫描\n
后,stdin
上有a
。在抓取角色或将getchar()
更改为scanf
后,请致电scanf("%c%*c", &o)
。因此,第二次循环查找输入时,它已经等待\n
,它将打开该值,不执行任何操作,然后再次提示。
答案 1 :(得分:1)
scanf("%c",&o);
将只读取一个字符,而不会跳过空格。换句话说,它会将换行符,制表符和空格字符视为有效输入。
要跳过空格字符,请使用
scanf(" %c",&o);
^---- note the extra space here
答案 2 :(得分:0)
在getchar()
之后添加scanf
。
答案 3 :(得分:0)
输入输入并点击“输入”后,&#39; \ n&#39;存储在输入缓冲区中,下一个scanf需要&#39; \ n&#39;作为输入。因此,您首先需要摆脱换行符。这可以通过使用另一个变量(下面的代码中的clr
)来存储换行符来实现。以下是修改:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char o,clr;
while(1)
{
printf("> ");
scanf("%c",&o);
clr=getchar(); // line added
switch(o)
{
case 'a' :
printf("%c\n",o);
break;
case 'q' :
return 0;
}
}
}