输入:
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;
}
答案 0 :(得分:2)
根据C标准,在/usr/local/Cellar/assimp/4.1.0/lib
上使用fflush
是未定义的行为。某些编译器支持它,但不建议这样做。
我会改用stdin
。
fgets