我不明白为什么下面的代码这样工作..我的意思是:而不是每一秒延迟后打印“你好”…它等待5秒钟,并显示hellohellohellohellohello一次。
#include <stdio.h> int i; for(i=0; i<5; i++) { printf("hello"); sleep(1); }
如果输出到tty, printf()
( stdout
)的输出默认是行缓存的。 你需要一个
printf("hello\n");
要么
printf("hello"); fflush(stdout);
后者将显式地刷新每次迭代的输出。
printf不立即打印,而是每行缓存一行。
添加“\ n”(换行符)添加字符串的结尾printf("hello\n");
或者用write函数write(STDOUT_FILENO, "hello", sizeof("hello"));
。
您正在写入标准输出( stdout
),它被缓冲 。 如果您希望立即打印内容,则可以刷新输出或插入换行符。
你可以在你的字符串的末尾添加一个\n
来打印新行 – 将你的printf
行改为:
printf("hello\n");
为了清除stdout
缓冲区的调用,在printf
:
#include <stdio.h> int main() { int i; for(i=0; i<5; i++) { printf("hello"); fflush(stdout); sleep(1); } }
通常输出可以被缓冲。 这意味着在实际写入控制台之前,实现会收集几个字节。 您可以通过fflush(stdout)明确写入缓冲区。 所有文件描述符都是如此,其中之一是stdout,即终端输出。 你可以使用setbuff(stdout,NULL)来禁止缓冲,但这几乎不是一个好主意。
尝试这个:
int i; for(i=0;i<5;i++){ printf("hello\n"); i=0; sleep(1); }