在这种情况下,fflush有什么用?

时间:2019-06-15 18:36:15

标签: c buffer

输入:

malik
MrJupiter

输出;

malik
malik

我知道fflush(FILE * stream)用于清除缓冲区,但是在此示例中,由于第一个扫描的输入是“ malik \ n”,因此(首次)使用字符串“ malik \ n”,并在打印后清除(我认为...)。在第二次迭代中,由于缓冲区为空(似乎不为空,因为第二个输出与第一个输出相同),程序必须返回“ MrJupiter \ n”。

有人可以告诉我这种情况下缓冲区的操作方式吗?

#include <stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    char str[20]; 
    int i; 
    for (i = 0; i<2; i++) 
    { 
        scanf("%[^\n]s", str); 
        printf("%s\n", str); 

        // used to clear the buffer 
        // and accept the next string 
        fflush(stdin); 
    } 
    return 0; 
}  

1 个答案:

答案 0 :(得分:2)

根据C标准,在/usr/local/Cellar/assimp/4.1.0/lib上使用fflush未定义的行为。某些编译器支持它,但不建议这样做。

我会改用stdin

fgets