0

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

    }
4

2 回答 2

0

刷新输入流是未定义的行为。对于输出缓冲区,试试这个:

fflush(stdout);

setbuf(stdout,NULL);

您也可以尝试fpurge该函数fpurge()擦除给定流中缓冲的任何输入或输出。对于输出流,这会丢弃任何未写入的输出。对于输入流,这会丢弃从底层对象读取的任何输入。注意:fpurge非标准且不可移植。

看看stackoverflow上的这篇文章:我无法刷新标准输入

于 2013-07-01T13:11:24.600 回答
0

使用fflush(stdin). 从手册fflush()

对于输入流, fflush() 丢弃任何已从底层文件获取但尚未被应用程序使用的缓冲数据。流的打开状态不受影响。

但是请注意,这不是标准的。
你也可以这样

while((c = getchar()) != '\n' && c != EOF)
    /* discard */ ;

这将丢弃所有额外的字符,直到换行。
对于输出缓冲区使用:fflush(stdout);

于 2013-07-01T12:54:23.627 回答