我要打印一个简单的加载消息,即“加载中...”,其中点之间是一一延迟地引入的。显示第三个点时,我要删除这些点并重新开始。
我正在尝试的代码是:
PRINTF("Loading");
for(int i=0;i<=3;i++){
DelayMs(800);
PRINTF(".");
}
DelayMs(800);
PRINTF("\r ");
PRINTF("\r");
由于某种原因,我的行为很奇怪,我也不知道为什么。我在屏幕上看到的是以下几行之一:
.Loading....
Loading .Loading....
谢谢。
答案 0 :(得分:1)
当输出不包含换行符时,使用fflush(stdout)
强制打印。
格式说明符%.*s
将输出长度受整数参数限制的字符串。随着each
的增加,打印的点数将从零变为三。空格将“擦除”先前的点,而退格\b
将擦除空格。
在Linux上,我使用sleep
而不是DelayMS
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main( void) {
for ( int loop = 0; loop < 4; ++loop) {
for ( int each = 0; each < 4; ++each) {
printf ( "\rloading%.*s \b\b\b", each, "...");
fflush ( stdout);//force printing as no newline in output
sleep ( 1);
}
}
printf ( "\n");
return 0;
}
答案 1 :(得分:0)
要重置线路时,请尝试以下printf("\rListening")
代替
PRINTF("\r>> ");
PRINTF("\r");
应该是:
while(condition to stop this animation){
printf("Listening");
for(int i=0; i<3; i++){
delay(500);
printf(".");
}
printf("\r");
}