睡在里面for循环

我不明白为什么下面的代码这样工作..我的意思是:而不是每一秒延迟后打印“你好”…它等待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); }