这是K&R给出的一个声明,printf()和putchar()可以交错.如果是,那么为什么以下代码没有提供所需的输出: -
#include"stdio.h"
void main()
{
char c,d;
printf("Enter the first character\n");
scanf("%c",&c);
printf("%c\n",c);
printf("Enter the second character\n");
d=getchar();
putchar(d);
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
每当我执行这个程序时,输出如下: -
Enter the first character a a Enter the second character
这是输出.如果我用putchar()替换printf()和用getchar()替换scanf(),也会发生这种情况.这为什么开心呢?
第一个scanf在输入缓冲区中留下\n由Return压力产生的结果,因此您的第二个getchar()将获得此\n而不是从用户获取另一个字符.
如果你想跳过那个换行符,你可以指示scanf"吃掉"它:
scanf("%c\n",&c);
Run Code Online (Sandbox Code Playgroud)
或直接打电话给"吃掉" getchar():
scanf("%c",&c);
getchar();
Run Code Online (Sandbox Code Playgroud)
(请注意,这些并不完全等效,因为第二个片段会吃掉碰巧在缓冲区中出现的任何字符,而第一个片段只有当它是a时才会删除它\n)