当我运行下面的代码时,它按预期工作。
#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'
的不良行为并输出相同的行为。
为什么会这样?
答案 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);
,以便它也可以获得回报。