这是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");
}
每当我执行这个程序时,输出如下: -
Enter the first character
a
a
Enter the second character
这是输出 . 如果我用putchar()替换printf()和用getchar()替换scanf(),也会发生这种情况 . 这为什么开心呢?
4 回答
第一个
scanf
在输入缓冲区中留下__返回按下的\n
,因此您的第二个getchar()
将获取此\n
而不是从用户获取另一个字符 .如果要跳过该换行符,可以指示
scanf
到"eat":或"eat it"直接拨打
getchar()
:(请注意,这些并不完全等效,因为第二个片段会吃掉碰巧在缓冲区中出现的任何字符,而第一个片段只有当它是
\n
时才会删除它)您可以像这样更正您的代码:
你得到两个,因为你键入一个回显到控制台,然后你打印出来 .
在使用getchar()之前刷新stdin ..
在turbo中,使用fflush()..
在gcc中,使用__fpurge(stdin)..(这在
<stdio_ext.h>
Headers 中可用)..在扫描任何内容之前刷新标准输入将解决您的问题..