C - 为什么我得到两个字符而不是一个作为输出?
C - Why am I getting two characters excpet one as output?
所以我创建了这个小程序来代表我的问题。 运行 程序输入 '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)*
请给我一些解决问题的建议。谢谢。
在 scanf
之后添加 getchar()
。
扫描出a
后stdin
上有一个\n
。抓住角色后调用 getchar()
或将 scanf
更改为 scanf("%c%*c", &o)
。因此,您的循环第二次查找输入时,它已经有 \n
等待,它会打开该值,什么都不做,然后再次提示。
键入输入并点击 'Enter' 后,'\n' 将存储在输入缓冲区中,下一个 scanf 将'\n' 作为输入。因此,您首先需要摆脱换行符。这可以通过使用另一个变量(下面代码中的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;
}
}
}
scanf("%c",&o);
将准确读取一个字符,不会跳过 whitespace。换句话说,它将换行符、制表符和 space 个字符视为有效输入。
要跳过白色space 个字符,请使用
scanf(" %c",&o);
^---- note the extra space here
所以我创建了这个小程序来代表我的问题。 运行 程序输入 '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)*
请给我一些解决问题的建议。谢谢。
在 scanf
之后添加 getchar()
。
扫描出a
后stdin
上有一个\n
。抓住角色后调用 getchar()
或将 scanf
更改为 scanf("%c%*c", &o)
。因此,您的循环第二次查找输入时,它已经有 \n
等待,它会打开该值,什么都不做,然后再次提示。
键入输入并点击 'Enter' 后,'\n' 将存储在输入缓冲区中,下一个 scanf 将'\n' 作为输入。因此,您首先需要摆脱换行符。这可以通过使用另一个变量(下面代码中的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;
}
}
}
scanf("%c",&o);
将准确读取一个字符,不会跳过 whitespace。换句话说,它将换行符、制表符和 space 个字符视为有效输入。
要跳过白色space 个字符,请使用
scanf(" %c",&o);
^---- note the extra space here