创建加载动画

标签 c loader

我想用 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/

相关文章:

c - 将 'char *(char *)' 传递给类型为 'VALUE (*)()' 的参数的不兼容指针类型

c - Winapi 多个 Windows 相同的 WindowProc

actionscript-3 - 外部 SWF 加载问题

sql - Oracle SQL Loader - 如何不显示 "Commit point reached - logical record count"计数

c - 如何在 C 数组中找到下一个空间?

c - 段错误(核心已转储)堆栈

jquery - 我试图在 Jquery Ajax 调用之前显示 Loader,但它不起作用

javascript - 如何自动重新编译流程删除类型的更改发生

php - Codeigniter 第三方,$this->load->add 包路径无法正常工作

c - 除了 -Wall 和 -Wextra 之外,还有哪些其他工具可以用来发现尽可能多的错误或警告?