木火唳唳的日常

一天一天,一点一点

关于 fflush(stdin)

fflush(stdin)这个方法在GCC下不可用。(在VC6.0下可以)
以下是 C99 对 fflush 函数的定义:
int fflush(FILE *stream);
如果stream指向输出流或者更新流(update stream),并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。否则,fflush函数的行为是不确定的。
fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,fflush函数会给那些流打上错误标记,并且返回EOF,否则返回0。
由此可知,如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用fflush(stdin) 是不正确的,至少是移植性不好的。
可采用如下方法:
/* 此函数可以和scanf函数一起使用,但使用%c输入时要注意,即此函数只能用于缓冲区非空的情况 */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
 
void flush()
{
    char c;
    while ((c = getchar()) != '\n' && c != EOF);
}
 
int main()
{
    int a, b, c; /* 计算a+b */
    while (scanf("%d, %d", &a, &b) != 2) flush();
    c = a + b;
    printf("%d+%d=%d",a,b,c);
}
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注