我试图让我的代码在屏幕上打印一些东西,然后等待1秒,然后绕过for循环,再次打印21次。当我在CodeBlocks中使用#include,然后使用睡眠(1000)来做这件事时,它是有效的。但是当我在我的Ubuntu虚拟机上使用#include和sleep(1)来做这件事时,所有的东西都从我的终端上消失了21秒,然后所有的东西都同时出现了。我想我用错了函数或者别的什么。
有什么想法吗?
这是Ubuntu终端中的代码,它最终删除了我的终端上已经存在的所有东西,等待21秒,然后打印21次"Hello“。
#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虚拟机中实现的。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
for (int i = 0; i < 21; i++)
{
printf("Hello");
Sleep(1000);
}
return 0;
}
发布于 2019-04-17 03:59:16
在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‘,它也会起作用。
https://stackoverflow.com/questions/55715722
复制相似问题