首先我调用getchar()并在标准输入/输出上输入一些字符,因为scanf()也可以获取这些字符,我想在调用scanf()之前清空缓冲区,这里是程序。
int main()
{
getchar(); // i input some characters here , "abcdefgh"
------ // here i need some statement that will empty standard input/output.
int a;
scanf("%d",&a); // so if buffer is empty, this prompt me to enter chacter.
// if i enter 7
printf("%d",a); // this should print 7
}
答案 0 :(得分:0)
使用fflush(stdin)
。来自fflush()
的{{3}}:
对于输入流,fflush()会丢弃已经存在的所有缓冲数据 从底层文件中获取,但尚未被使用 应用。流的开放状态不受影响。
但请注意,这不是标准 您也可以manpage:
while((c = getchar()) != '\n' && c != EOF)
/* discard */ ;
这将丢弃所有额外的字符,直到换行
对于输出缓冲区,请使用:fflush(stdout);
答案 1 :(得分:0)
刷新输入流是未定义的行为。 对于输出缓冲区,请尝试:
fflush(stdout);
setbuf(stdout,NULL);
您还可以尝试fpurge
函数fpurge()
将删除给定流中缓冲的任何输入或输出。对于输出流,这会丢弃任何未写入的输出。
对于输入流,这将丢弃从底层对象读取的任何输入。
注意:fpurge
是非标准的,不可移植。
请看一下stackoverflow上的这篇文章:I am not able to flush stdin