如何暂停循环几秒钟?

Posted

技术标签:

【中文标题】如何暂停循环几秒钟?【英文标题】:how to pause a loop for a number of seconds? 【发布时间】:2020-05-03 21:13:54 【问题描述】:

每次他完成 1 个案例时,我都会尝试暂停一下。但是我把 sleep(1) 放在哪里并不重要,它会休眠 5 秒,而不是一次提供所有输出。或者当我要求 10 个输出时,它会等待 10 秒再给我输出。

我想要的是在下一秒之间获得 1 秒的输出,依此类推。这是我的代码,我已经把它做得尽可能小,所以它不会永远阅读。 我尝试在几乎每个地方都设置 sleep(1),但结果都是一样的。

//include list
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h>
#include <unistd.h>


// variable list
int i = 0;
int StopNow;
int start = 0;


int main(void) 
 
    srand(time(0));

    while(i<5) 
    
        switch(rand() % 4 + 1)      // picking a random number between 1 and 4.
        
            case 1:
                printf("\n 1");
                break;

            case 2:
                printf("\n 2");
                break;

            case 3:
                printf("\n 3");
                break;

            case 4:
                printf("\n 4");
                break;
        

        i++;
        sleep(1);               // Pause 
    

【问题讨论】:

你是从哪里运行这个程序的? 你如何运行你的程序?在在线 IDE 中? 如果在sleep 之前添加fflush(stdout); 调用,请查看行为是否改变。输出可能正在缓冲中。 @JulioAnthonyLeonard 我在 Visual Studio 代码中运行它 如果您使用 C++,请使用 coutendl 进行刷新。如果这没有帮助,请尝试使用 std::this_thread::sleep_for 而不是 Sleep 【参考方案1】:

我试图在一些在线编译器上运行你的代码 https://www.onlinegdb.com/online_c++_compiler

我认为您的代码没有问题,可能是编译器问题。

如果仍然无法正常工作,则可能是您的缓冲区存在问题。

有时,字符在超出某些缓冲区或换行符被打印之前不会被打印。有两种方法可以试试这个

    sleep 方法之前使用fflush(stdout) 调用来清除缓冲区 使用 C++ cout 库作为自动为您刷新的库的更好方法

【讨论】:

它不应该打印东西。只是更容易测试东西。但是谢谢, fflush(stdout) 完成了这项工作 cout 在缓冲区满之前不会刷新,与printf 相同。除非您调用 flush 函数,或使用导致刷新的 endl。说它是“自动的”与说 printf 自动刷新一样正确(或错误)。

以上是关于如何暂停循环几秒钟?的主要内容,如果未能解决你的问题,请参考以下文章

你如何在android中让代码暂停几秒钟?

问下:在Tkinter中如何使程序暂停几秒钟再执行

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟

循环后暂停css sprite一秒钟