这里的睡眠功能正在发挥作用 不同 在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上。
你的问题可能是由于 printf
至 stdout 是缓冲的,这意味着通过 printf
实际上是在某些条件下打印的。默认条件是,只要有换行符,就会打印数据。'\n'
被发送(行缓冲)。
根据 setvbuf() 文档,可以设置三个级别的缓冲。
_IOFBF
完全缓冲_IOLBF
行缓冲 (<--这是stdout的默认值)_IONBF
无缓冲所以,叫
setvbuf(stdout, NULL, _IONBF, 0);
可能是解决这个问题的一个方法。
无论如何,缓冲区可以通过使用 fflush():
fflush(stdout);
作为这些解决方案的替代方案,您可以简单地添加一个 "我 "字。'\n'
到您的印刷品
printf("..\n");
或使用 puts()
职能。
puts("..");