我正在尝试让我的代码在屏幕上打印一些东西,然后等待1秒钟,然后绕过for循环并再次打印21次。当我在Windows中使用#include然后使用Sleep(1000)在CodeBlocks中执行此操作时,它将起作用。但是,当我使用#include和sleep(1)在Ubuntu VM上执行此操作时,所有内容将从我的终端消失21秒钟,然后所有内容立即出现。我想我使用了错误的功能或其他功能。
有什么想法吗?
这是Ubuntu终端中的代码,该代码最终删除了终端上已经存在的所有内容,等待21秒,然后只打印21次。
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 0; i < 21; i++)
{
printf("Hello");
sleep(1);
}
}
这是Windows中每秒21秒打印一次“ Hello”的代码,因此在21秒内在我的屏幕上打印21个Hello。这是我要在我的Ubuntu VM中实现的目标。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
for (int i = 0; i < 21; i++)
{
printf("Hello");
Sleep(1000);
}
return 0;
}
答案 0 :(得分:1)
在UNIX中,进程流缓冲区-它们累积I / O,并且默认情况下不会在写入时立即“刷新”到基础设备。所以-您需要冲洗流:
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 0; i < 21; i++)
{
printf("Hello");
fflush(stdout);
sleep(1);
}
}
我相信,如果您在“ Hello”之后输出换行符'\ n',它也会起作用。
答案 1 :(得分:1)
printf
输出被缓冲-这意味着不能保证它立即显示在屏幕上。而是出现以下情况之一时出现:
printf
缓冲区,这就是您在屏幕上看到的内容最后一种情况对您来说最有趣,您可以通过两种方式执行此操作-要么在字符串中包含\n
(换行)控制字符,例如
printf("Hello\n");
或调用fflush
以获得标准输出流,例如
printf("Hello");
fflush(stdout);