一个动画处理图标,纯C
An animated processing icon, pure C
我想制作一个通过C在控制台输出的动画处理图标
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void render_processing_icon(int turnovers_qt) {
char *icon_characters = "|/-\[=10=]";
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 * turnovers * 8)结束后,程序输出这个(没有任何动画,如你所料):
$ \
$ CONTROL MESSAGE
sleep()
的工作原理相同,BASH sleep
也通过 sytstem()
。我只是不知道有什么问题。
这是因为您没有将 printf
刷新到终端。为了节省时间,终端通常会缓冲输出。在某些时候,当缓冲区已满或在某些终端中,当您将 \n
写入流时,它将自动刷新。
尝试在 for
循环中的 usleep
之前使用 fflush(stdout)
来强制刷新。
我想制作一个通过C在控制台输出的动画处理图标
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void render_processing_icon(int turnovers_qt) {
char *icon_characters = "|/-\[=10=]";
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 * turnovers * 8)结束后,程序输出这个(没有任何动画,如你所料):
$ \
$ CONTROL MESSAGE
sleep()
的工作原理相同,BASH sleep
也通过 sytstem()
。我只是不知道有什么问题。
这是因为您没有将 printf
刷新到终端。为了节省时间,终端通常会缓冲输出。在某些时候,当缓冲区已满或在某些终端中,当您将 \n
写入流时,它将自动刷新。
尝试在 for
循环中的 usleep
之前使用 fflush(stdout)
来强制刷新。