在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);