为什么我的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);
这样它也可以获得回报。