#include <stdio.h>
int main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout, buf);
while((c=getchar())!='b')
{
putchar(c);
fflush( stdout );
}
return 0;
}
setbuf(stdout, buf);==>之后的每一次使用putchar函数在调用fflush函数就把该字符写到buf中,等main函数返回后就把缓存里面的东西打印出来。
#include <stdio.h>
int main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout, buf);
while((c=getchar())!='b')
{
fflush( stdout );//更改位置
putchar(c);
}
return 0;
}
当更改fflush函数的位置后,输出相比输入会缺少一个
原因:当读到1,fflush() 执行一次空操作,接着遇到putchar(),然后把当前字符存到buf中。进如第二次循环,读取到2,但是fflush()此刻才把buf(内容为1)中的内容读走。进入第三次循环,读取到3,但是fflush()此刻才把buf(内容为1,2)中的内容读走。进入第四次循环,读取到‘b’,退出while循环。main函数返回,输出12
#include <stdio.h>
int main()
{
int c;
char buf[BUFSIZ] ;
setbuf(stdout, buf);
while((c=getchar())!='b')
{
putchar(c);
}
return 0;
}
输出乱码,为什么?当main函数返回时,buf为局部变量,被释放掉。buf里面的内容没有被及时读走,所以输出乱码
解决办法:把buf变量声明为全局变量,或者使用static关键字,或者在退出while循环之后使用fflush()函数