cod*_*r_r 2 c input scanf character input-buffer
我试图从用户输入两个字符t.这是我的代码:
int main()
{
int t;
scanf("%d",&t);
char a,b;
for(i=0; i<t; i++)
{
printf("enter a: ");
scanf("%c",&a);
printf("enter b:");
scanf("%c",&b);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,第一次输出是:
enter a:
enter b:
Run Code Online (Sandbox Code Playgroud)
也就是说,代码不等待值a.
问题是scanf("%d", &t)在输入缓冲区中留下了一个换行符,该换行符仅由scanf("%c", &a)(并因此a被赋予换行符)消耗.您必须使用换行符getchar();.
另一种方法是在scanf()格式说明符中添加一个空格以忽略前导空格字符(这包括换行符).例:
for(i=0; i<t; i++)
{
printf("enter a: ");
scanf(" %c",&a);
printf("enter b: ");
scanf(" %c",&b);
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢使用getchar()换行符,则必须执行以下操作:
for(i=0; i<t; i++)
{
getchar();
printf("enter a: ");
scanf("%c",&a);
getchar();
printf("enter b:");
scanf("%c",&b);
}
Run Code Online (Sandbox Code Playgroud)
我个人认为前一种方法更优越,因为它忽略任意数量的空格,而getchar()只消耗一种空格.