C 如何在for循环中正确实现sleep函数?(Ubuntu)
我试图让我的代码在屏幕上打印一些东西,然后等待1秒,然后绕过for循环,再打印21次。当我在Windows中使用#include然后Sleep(1000)以代码块的形式执行此操作时,它会起作用。但是当我在我的Ubuntu虚拟机上使用#include and sleep(1)时,我的终端上的所有东西都会消失21秒,然后立即出现。我想我用错了函数什么的 有什么想法吗 这是Ubuntu终端中的代码,它最终删除了我终端上的所有内容,等待21秒,然后只打印21次“Hello”C 如何在for循环中正确实现sleep函数?(Ubuntu),c,loops,for-loop,sleep,C,Loops,For Loop,Sleep,我试图让我的代码在屏幕上打印一些东西,然后等待1秒,然后绕过for循环,再打印21次。当我在Windows中使用#include然后Sleep(1000)以代码块的形式执行此操作时,它会起作用。但是当我在我的Ubuntu虚拟机上使用#include and sleep(1)时,我的终端上的所有东西都会消失21秒,然后立即出现。我想我用错了函数什么的 有什么想法吗 这是Ubuntu终端中的代码,它最终删除了我终端上的所有内容,等待21秒,然后只打印21次“Hello” #include <s
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 0; i < 21; i++)
{
printf("Hello");
sleep(1);
}
}
#包括
#包括
int main()
{
对于(int i=0;i<21;i++)
{
printf(“你好”);
睡眠(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;
}
#包括
#包括
#包括
int main(){
对于(int i=0;i<21;i++)
{
printf(“你好”);
睡眠(1000);
}
返回0;
}
在UNIX中,进程流缓冲区-它们累积I/O,并且不会在写入时立即“刷新”到基础设备(默认情况下)。因此-您需要刷新流:
#include <stdio.h>
#include <unistd.h>
int main()
{
for (int i = 0; i < 21; i++)
{
printf("Hello");
fflush(stdout);
sleep(1);
}
}
#包括
#包括
int main()
{
对于(int i=0;i<21;i++)
{
printf(“你好”);
fflush(stdout);
睡眠(1);
}
}
我相信,如果在“Hello”之后输出换行符“\n”,它也会起作用。
printf
输出是缓冲的,这意味着不能保证它立即出现在屏幕上。相反,当下列情况之一发生时,它会出现:
- 当缓冲区变满时,-此时缓冲区的旧内容显示在屏幕上,缓冲区被清除为新输出的新内容-这称为缓冲区刷新
- 当应用程序终止时-强制刷新所有
缓冲区,这就是您在屏幕上看到的printf
- 当程序员刷新缓冲区时
\n
(新行)控制字符,如
printf("Hello\n");
或者调用stdout流的fflush
,如
printf("Hello");
fflush(stdout);
将
printf
替换为put
。投票结束:OP承认他们提供的MCVE与他们正在解决的实际问题不同,建议新问题。引用OP:我尝试添加fflush(stdout);正如您所建议的,但它不适用于我的代码-可能是因为我使用的是mvprintw(来自ncurses)而不是printf
,有没有办法使用其他函数来实现同样的功能?我尝试添加fflush(stdout)代码>如您所建议,但它不适用于我的代码-可能是因为我使用的是mvprintw
(来自ncurses)而不是printf
。我以为我可以应用相同的解决方案,但显然不行。还有什么东西可以代替睡眠吗?@Sawy3r如果你的MCVE实际上是MCVE,那么它将对你和回答你问题的人有巨大的帮助。你现在有两个答案,把你的问题带到了它的表面价值上。我建议你用适当的MCVE问一个不同的问题。