所以我想让文字显示为“正在加载”,然后是3个延迟的点,让它们重新开始,如:
Loading.
Loading..
Loading...
Loading.
等等,但总是在同一条线上。
我查看了没有dos.h
文件的延迟函数(因为我正在使用gcc),但我不确定如何使点消失并从第一个点重新开始。
答案 0 :(得分:1)
你需要两件事。
\r
或回车,将光标移回行的开头。
然后通常stdout
在看到换行符之前不会显示任何内容。这称为缓冲,需要关闭。您可以使用setvbuf()
执行此操作。
这是一个演示。
#include <stdio.h>
#include <unistd.h>
int
main()
{
/* Turn off stdout buffering */
setvbuf(stdout, NULL, _IONBF, 0);
for(int i = 0; i < 3; i++) {
/* Clear the current line by moving to the start,
overwriting it with spaces, and going back to the start.
*/
printf("\r \r");
printf("Loading");
/* Print ... over 3 seconds */
for(int i = 0; i < 3; i++) {
sleep(1);
printf(".");
}
sleep(1);
}
/* Finish it all up with a newline */
printf("\n");
return 0;
}
有更好的方法可以执行此操作using the curses library,但\r
足以达到您的目的。
答案 1 :(得分:1)
您需要使用'\ r'字符:
while (1) {
int i;
for (i=1; i<=3; i++) {
printf("Loading%s\r", i==1 ? "." : i==2 ? "..":"...");
fflush(stdout);
sleep(1); /* or whatever */
}
printf("%20s\r", " ");
}
(已修复:已添加fflush(stdout);
)
答案 2 :(得分:0)
字符'\ b'将光标移回一个位置。以下序列可以获得您想要的结果:
printf("Loading.");
while (not done yet) {
delay
printf(".");
delay
printf(".");
delay
printf("\b\b \b\b"); // erase the last two dots, and move the cursor back again
}