#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[1024];
int a,b;
int i;
setbuf(stdin, buf);
scanf("%d %d", &a, &b);
for(i=0; buf[i]!='\n'; i++){
putchar(buf[i]);
}
putchar('\n');
return 0;
}
当我输入值
1 2
时,我使用了setbuf
来确定在读取值后缓冲区是否真的被清除。
然而,当我打印出buf
时,输入的值仍保持不变。也就是说,输出结果是1 2
。为什么会发生这种情况?如果您能回答,我将不胜感激。
char buf[1024]
是不正确的。应该使用char buf[BUFSIZ]
。 - Steve Summitchar buf[BUFSIZ];
也不正确。应该是static char buf[BUFSIZ];
,因为缓冲区的生命周期必须至少与流的生命周期一样长。请参见 ISO C11 标准的 脚注 273。cppreference.com 上的文档 也指出了这一点。 - Andreas Wenzel