为什么我的scanf语句中的空格有所不同?

时间:2011-08-23 19:05:32

标签: c scanf

当我运行下面的代码时,它按预期工作。

#include <stdio.h>
int main()
{
    char c;
    scanf("%c",&c);
    printf("%c\n",c);

    scanf(" %c",&c);
    printf("%c\n",c);

    return 0;
}

如果我删除了第二个scanf电话(scanf("%c",&c);)中的空格,则程序会使用第二个scanf扫描'\n'的不良行为并输出相同的行为。

为什么会这样?

3 个答案:

答案 0 :(得分:4)

如果要读取丢弃换行符和空格的字符,请使用

scanf("\n%c",&c);

它就像一个魅力。

答案 1 :(得分:3)

那是因为当您输入第一个scanf调用的角色时,除了输入角色本身之外,还按下了“Enter”(或“Return”)。 “Enter”按键会向标准输入发送'\ n',这是您的第二次扫描调用扫描的内容。

因此第二个scanf只获取输入流中的下一个字符,并将其分配给您的变量(即,如果您不使用此scanf语句中的空格)。因此,例如,如果您不使用第二个scanf和

中的空格

你这样做:

a<enter>
b<enter>

第一个scanf指定“a”,第二个scanf指定“\ n”。

但是当你这样做时:

ab<enter>

猜猜会发生什么?第一个scanf将分配“a”,第二个scanf将分配“b”(而不是“\ n”)。

另一种解决方案是使用scanf("%c\n", &c);作为第一个scanf语句。

答案 2 :(得分:0)

将您的第一次扫描转为:scanf("%c\n",&c);,以便它也可以获得回报。