2

我想通过C在控制台中输出一个动画处理图标。

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

void render_processing_icon(int turnovers_qt) {
  char *icon_characters = "|/-\\\0";

  for (int i = 0; i < turnovers_qt * 8; i++) {
    printf("\b%c", icon_characters[i % 4]);

    usleep(500000); // sleep for a half of a second
  }

  printf("\n");
}

int main(int argc, char *argv[]) {
    render_processing_icon(2);

    printf("CONTROL MESSAGE\n");

    return 0;
}

但是在usleep()时间(0.5s * 失误 * 8)结束后,程序会输出这个(没有任何动画,正如你所猜测的):

$ \
$ CONTROL MESSAGE

sleep()sleep工作方式相同,BASHsytstem()也一样。我只是不知道有什么问题。

4

1 回答 1

4

这是因为您没有将 冲洗printf到终端。为了节省时间,终端通常会缓冲输出。在缓冲区已满或在某些终端中写入\n流时,它会自动刷新。

尝试在循环中使用fflush(stdout)before来强制刷新。usleepfor

于 2018-10-02T14:38:56.750 回答