如何冲洗stdin?是吗?
为什么在下面的代码片段中不起作用?

#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>

int main()
{
        int i=0,j=0, sat;
        char arg[256];
        char * argq;
        argq = malloc(sizeof(char)*10);

        printf("Input the line\n");
        i=read(0, arg, sizeof(char)*9);
        arg[i-1]='\0';
        fflush(stdin);

        i=read(0, argq, sizeof(char)*5);
        argq[i-1]='\0';

        puts(arg);
        puts(argq);

        return 0;
}

现在,如果我将输入设为11个字符,则只应读取9个字符,但stdin中的其余两个字符不会刷新并在argq中再次读取。为什么?
输入:
123 456 789号
输出:
123 456个
八十九
为什么我得到这个89作为输出?

最佳答案

我相信fflush只用于输出流。
您可以在Linux上尝试fpurge__fpurge。请注意,fpurge是非标准且不可移植的。你可能买不到。
从aLinux fpurge man page:通常,要放弃输入缓冲区是一个错误。
冲洗stdin最方便的解决方案可能是以下几点:

int c;
while ((c = getchar()) != '\n' && c != EOF);

10-08 07:37