C睡眠功能不工作

C睡眠功能不工作,c,sleep,unistd.h,C,Sleep,Unistd.h,从unistd.h包含睡眠功能时,程序无限期挂起: #include <stdio.h> #include <unistd.h> int main() { int i; printf("0 "); for(i = 1; i <20; ++i) { sleep(2); printf("%d ", i); } printf("

unistd.h
包含睡眠功能时,程序无限期挂起:

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i;
        printf("0 ");
        for(i = 1; i <20; ++i)
        {
            sleep(2);
            printf("%d ", i);
        }
        printf("\n");

        return 0;
}
#包括
#包括
int main()
{
int i;
printf(“0”);

对于(i=1;i代码没有问题,但请注意,在许多情况下,
printf
的输出是缓冲的,这意味着只有在显式调用
fflush(stdout)时,输出才会显示在控制台上
,打印一个换行符,或者缓冲区变满。由于直到最后才打印换行符,因此在for循环中40秒内将看不到任何内容(因为打印的内容仍在缓冲区中)。然后,当执行命中
printf(“\n”)
,在刷新缓冲区时,所有内容都将立即打印


因此,底线是:调用
fflush(stdout)
在调用
sleep
以确保输出缓冲区中没有任何内容,或者等待40秒,最终将在一批中获得输出。

您是在Windows计算机上吗?如果是,请在程序中包含
,要暂停程序,请编写

Sleep(time_in_milliseconds)
在你的例子中,时间单位应该是2000毫秒


另一方面,如果您使用的是基于UNIX的计算机,代码看起来很好(不需要
)。

无限期挂起
意味着它被卡住或不确定,而这不会发生。您的代码在38秒(19*2)后工作正常它将字符串计数从0转储到19。但是我怀疑这就是您希望它执行的操作:

int main()
{
        int i;
        printf("0 ");
        fflush(stdout);  // Force the output to be printed
        for(i = 1; i <20; ++i)
        {
            sleep(2);
            printf("%d ", i);
            fflush(stdout); // Force the output to be printed
        }
        printf("\n");

        return 0;
}
intmain()
{
int i;
printf(“0”);
fflush(stdout);//强制打印输出

对于(i=1;我还注意到printf(“0”)行没有运行,因此这不是睡眠时间的问题()。缓冲?如果用换行符结束打印的字符串会发生什么?编辑:如我所料,38秒的静默,然后打印数字。如果执行
fflush(stdio)会发生什么
在每次迭代中?可能会重复@JamesJenkinson-:)它会发生。调试器对此很好,因此您可以看到它正在做一些事情,如果没有这些,只需等待最长时间即可
sleep()