如何冲洗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);