睡眠功能没有发挥预期的作用

问题描述 投票:0回答:2

这里的睡眠功能正在发挥作用 不同 在Windows和Linux上。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>

int main()
{
printf("Press 1 to apply for Password Change Request...\n");
                printf("\nPress any other key to try again");
                fflush(stdout);
                for(int j=0; j<2; j++)
                {
                        sleep(1);
                        printf("..");
                }
}
return 0;

窗口它的工作原理是,等待一秒钟,然后打印。.. 然后再等待一秒钟,然后打印出 ...但在 Linux它等待了整整两秒钟,然后打印了 .... 完全。

我应该怎么做才能解决?

我使用的是 MinGW 在Windows上。

c gcc mingw
2个回答
3
投票

你的问题可能是由于 printfstdout 是缓冲的,这意味着通过 printf 实际上是在某些条件下打印的。默认条件是,只要有换行符,就会打印数据。'\n' 被发送(行缓冲)。

根据 setvbuf() 文档,可以设置三个级别的缓冲。

  • _IOFBF 完全缓冲
  • _IOLBF 行缓冲 (<--这是stdout的默认值)
  • _IONBF 无缓冲

所以,叫

 setvbuf(stdout, NULL, _IONBF, 0);

可能是解决这个问题的一个方法。

无论如何,缓冲区可以通过使用 fflush():

fflush(stdout);

作为这些解决方案的替代方案,您可以简单地添加一个 "我 "字。'\n' 到您的印刷品

printf("..\n");

或使用 puts() 职能。

puts("..");
© www.soinside.com 2019 - 2024. All rights reserved.