【发布时间】:2011-01-12 08:22:05
【问题描述】:
如何刷新标准输入?
为什么在下面的代码 sn-p 中不起作用?
#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 个字符,但不会刷新标准输入中的剩余两个字符并在 argq 中再次读取。为什么?
输入: 123 456 789
输出: 123 456 89
为什么我得到这个 89 作为输出?
【问题讨论】:
-
因为 fflush() 只为输出流定义。
-
您始终可以创建自己的函数来丢弃输入字符。如果您将其命名为
ignore,那么您可能更接近 C++ 流。 ;-)