在C中使用scanf()连续读取两个字符
我尝试从用户在C中使用scanf()连续读取两个字符,c,input,character,scanf,input-buffer,C,Input,Character,Scanf,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
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;
}
也就是说,代码不等待
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);
}
我个人认为前一种方法是优越的,因为它忽略了任意数量的空白,而<代码> GETCHARE()/<代码>只消耗了一个。
通过查看代码,它是完美的,它应该读取A和B的T次,但它每次替换循环A和B。
使用数组或哈希表有效地存储与scanf
一起使用的一些格式会从stdin
中删除换行符,但其他格式则不会。使用“%d”
阅读属于后一类。您需要先阅读换行符'\n'
,然后才能读入
scanf("%c", &a);
这个问题只是关于输入,而不是处理a和b,所以你回答的是另一个问题,而不是这个问题。很抱歉,你没有得到你的问题的帮助……或者你可以在scanf
->scanf(%c,&a)
@haccks是的,是的,我会把这个添加到我的答案中-谢谢你的提示;)仅在循环之前添加getchar不起作用。但是,仅在循环开始和结束时添加getchar在这种情况下起作用。@babji Yep,仅在循环之前使用getchar()
不起作用。我意识到了这一点,但随后编辑了我的答案,忘记删除这一部分。不过谢谢你的提醒,我现在已经把它删除了。@FilipeGonçalves:谢谢,在读了你精彩的答案后,我知道了一些新的东西。
for(i=0; i<t; i++)
{
getchar();
printf("enter a: ");
scanf("%c",&a);
getchar();
printf("enter b:");
scanf("%c",&b);
}
scanf("%c", &a);