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

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

#include  int main() { char c; scanf("%c",&c); printf("%c\n",c); scanf(" %c",&c); printf("%c\n",c); return 0; } 

如果我删除第二次scanf调用中的空格( scanf("%c",&c); ),程序会出现第二次扫描的不良行为,扫描'\n'并输出相同的内容。

为什么会这样?

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

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

你做这个:

 a b 

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

但是当你这样做时:

 ab 

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

另一个解决方案是使用scanf("%c\n", &c); 为您的第一个scanf声明。

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

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

它就像一个魅力。

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