使用C中的scanf()连续读取两个字符

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.

Fil*_*ves 7

问题是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()只消耗一种空格.