C语言中scanf()导致printf()输出时机异常问题求助
解决printf在scanf前未提前输出的问题
这是标准输出(stdout)的行缓冲机制导致的。默认情况下,stdout采用行缓冲,只有输出包含换行符\n、缓冲区填满,或是程序结束时,才会把缓冲区里的内容输出到终端。你的printf语句没有换行符,内容暂存在缓冲区,直到scanf执行时触发了缓冲区刷新,才会一起显示。
提供三种解决方法:
- 在printf的字符串末尾添加换行符(最常用,符合终端输出习惯):
printf("blah blah blah\n"); int getInput; scanf("%d", &getInput);
- 手动调用
fflush强制刷新标准输出缓冲区(适合不能添加换行符的场景):
printf("blah blah blah"); fflush(stdout); // 强制将缓冲区内容输出到终端 int getInput; scanf("%d", &getInput);
- 全局设置stdout为无缓冲模式(适合整个程序都需要实时输出的场景):
#include <stdio.h> // 需要包含头文件 int main() { setbuf(stdout, NULL); // 关闭stdout的缓冲 printf("blah blah blah"); int getInput; scanf("%d", &getInput); return 0; }
内容的提问来源于stack exchange,提问作者Gavin Robinson
相关产品推荐
相关产品推荐

