我有以下程序
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ans[8];
int i;
for(i=1;i<=3;i++)
{
printf("\n What is the unit of traffic ?");
scanf("%s",ans);
fflush(stdin);
if(stricmp(ans,"Earlang")==0)
{
printf("\nAnswer is correct");
exit(1);
}
else
if(i<3)
printf("\n Try Again!\n");
}
printf("\n Nunit of traffic is Earlang:");
}
Run Code Online (Sandbox Code Playgroud)
fflush(stdin)在这个程序中有什么用?
Yu *_*Hao 25
它不在标准C中,因此行为未定义.
一些实现使用它来清除stdin缓冲区.
从C11 7.21.5.2 fflush函数,fflush只适用于输出/更新流,而不是输入流.
如果流指向输入流或未输入最近操作的更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件; 否则,行为未定义.
小智 5
从输入缓冲区中删除所有数据到下一个换行符是一种不可移植的方法.我已经看到它用于这样的情况:
char c;
char s[32];
puts("Type a char");
c=getchar();
fflush(stdin);
puts("Type a string");
fgets(s,32,stdin);
Run Code Online (Sandbox Code Playgroud)
没有fflush(),如果你输入一个字符,说"a",然后点击输入,输入缓冲区包含"a \n",getchar()查看"a",但"\n"保留在缓冲区中,所以下一个fgets()将找到它并返回一个空字符串,甚至没有等待用户输入.
但是,请注意,这种使用fflush()是不可移植的.我现在已经在Linux机器上进行了测试,但它不起作用,例如.