【问题标题】:How to make a delay between printing characters in a string print loop?如何在字符串打印循环中打印字符之间产生延迟?
【发布时间】:2019-02-17 16:58:34
【问题描述】:

我正在尝试分别打印每个字符并在它们之间设置延迟,因此当我运行循环时,不是立即打印每个字符,而是一次打印一个字符。

我们的目标是让一个字符串一次打印出一个字母,并且看起来像是由程序输入的。

我使用了我在互联网上找到的延迟代码,它应该在字符打印之间产生时间延迟。

#include <stdlib.h>    
#include <time.h>    
#include <string.h>    

void delay(unsigned int milliseconds) {    
    clock_t start = clock();    
    while ((clock() - start) * 1000 / CLOCKS_PER_SEC < milliseconds);    
}    

int main() {    
    int c = 0;    
    char s[6] = { 'H', 'e', 'l', 'l', 'o', '\0' };    
    for (c = 0; s[c] != '\0'; c++) {    
        printf("%c", s[c]);    
        delay(1000);    
    }    
    return 0;    
}    

我希望它一次打印每个字母,每个字母之间有第二个延迟,但它会等待 6 秒并打印出所有内容。

【问题讨论】:

  • 这种技术被称为忙等待,它不必要的粗暴和CPU密集型,导致电池耗尽。您应该改用sleep(1),它可以有效地挂起线程。在printf() 之后添加fflush(stdout); 将解决增量问题。

标签: c


【解决方案1】:

来自printf 和写入stdout 和其他文件的其他函数的输出可能会被缓冲,因此它们可能仅在刷新缓冲区时才会显示。

您可以在循环中添加行 fflush(stdout) 以强制将缓冲区刷新到流中,从而保证当前在缓冲区中的任何未决输出都将被写出。

【讨论】:

  • @TheSnoze 表示答案已解决您的问题,您可以通过单击投票箭头附近的复选框图标将其标记为已接受
  • @GovindParmar: inside your loop 是模棱两可的......在调用delay(1000) 会更好之前,最好发布代码的修改版本。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多