Анимированная иконка обработки, чистый C - PullRequest
0 голосов
/ 02 октября 2018

Я хочу сделать анимированный значок обработки, выводимый на консоль через 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,5 с * обороты * 8) программа выводит это (без анимации), как вы уже догадались):

$ \
$ CONTROL MESSAGE

sleep() работает так же, BASH sleep через sytstem() тоже.Я просто понятия не имею, в чем проблема.

1 Ответ

0 голосов
/ 02 октября 2018

Это потому, что вы не сбрасываете printf в терминал.Для экономии времени терминал обычно буферизует вывод.В какой-то момент, когда буфер заполнен или в некоторых терминалах, когда вы записываете \n в поток, он автоматически сбрасывается.

Попробуйте использовать fflush(stdout) перед usleep в вашем for цикле, чтобы вызвать этот сброс.

...