我想用 C 语言创建一个加载器动画。我做不好,所以我尽量保持简单。我试图做这样的事情: 首先它会出现:
[ ]
[| ]
[|| ]
等等……
我想使用 sleep 函数,所以它看起来像是在实际加载但不会太慢,我想添加百分比会很好,如果它是一个 for 循环,其中“i”作为一个整数来计算它的移动,而不是它'将是 printf("i%%");
因为“%”不会打印“%”而是“%%”。
您知道我该怎么做吗?
编辑: 这就是我到目前为止所得到的,没有工作是有原因的:
for(i = 1 ; i <= 100 ; i++)
{
Sleep(10);
printf("\r");
printf("[");
for(j = 1 ; j <= i ; j++)
{
printf("|");
}
}
printf("]");
但它只会打印“[|”然后“[||”然后是“[|||”等等(它也打印了太多“|”)。我希望它打印“[ ]”(100 个空格),然后打印“[| ]”,这样每次都能看到第一个和最后一个括号。
第二次编辑: 完成了这个:
void changestr(char str[], int n)
{
str[n] = '|';
}
void loader()
{
int i, j, n = 0;
char str[] = " ";
for(i = 0 ; i < 97 ; i++)
{
printf("\r[%-100s]", str);
changestr(str, n);
n++;
}
}
它正在打印大量的行而不是覆盖第一行.... 怎么办?
最佳答案
这是一个面向 Windows 的想法:
#include <stdio.h>
#include <windows.h>
#define PROGRESS_BAR_SIZE 40
void print_n_chars(int n, int c) {
while (n-- > 0) putchar(c);
}
void display_progress_bar(int p) {
putchar('\r');
putchar('[');
print_n_chars(PROGRESS_BAR_SIZE * p / 100, '|');
print_n_chars(PROGRESS_BAR_SIZE - PROGRESS_BAR_SIZE * p / 100, ' ');
putchar(']');
}
int main(void) {
int p;
for (p = 0; p <= 100; ++p) {
display_progress_bar(p);
Sleep(100);
}
return 0;
}
如果您这样更改代码,您的代码就可以工作了:
void loader() {
int i;
char str[] = " ";
for(i = 0 ; i <= 40 ; i++) {
printf("\r[%s]", str);
str[i] = '|';
Sleep(100);
}
}
关于创建加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582448/