提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
问题
运行程序时发现printf函数总是在scanf函数运行结束后才输出显示。显示顺序不对。
#include <stdio.h>
int main() {
int a;
while(scanf("%d",&a))
{
if(5<a && a<10)
{
printf("a is between 5 and 10\n");
return 0;
}else{
printf("a is not between 5 and 10\n");
}
}
return 0;
}
按上例,最终输出结果如下图,顺序不对
总结原因
在C语言中,printf函数的输出结果并不会立即输出到屏幕上,而是会先存储在缓冲区中。当程序执行到scanf函数时,会等待用户的输入,直到用户输入完成并按下回车键时,scanf函数才会返回,此时缓冲区的内容才会被刷新并输出到屏幕上。
解决方法
1.强制刷新输出缓冲区
printf("xxxxxx");
fflush(stdout); //强制刷新输出缓冲区,使得printf的内容立即输出
scanf("%d", &n);
2.禁用输出缓冲区
int main() {
setbuf(stdout, NULL);//禁用输出缓冲区
printf("xxxxxxxxxx");
scanf("%d", &n);
}
END
以上都是自己整理知识自查用,如有错误欢迎大家指正