如何在C中清空标准输入/输出缓冲区

时间:2013-07-01 12:48:26

标签: c io scanf getchar

首先我调用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

    }

2 个答案:

答案 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