C語(yǔ)言中如何使用printf函數(shù)實(shí)現(xiàn)進(jìn)度條效果

小樊
99
2024-09-19 22:41:24

在C語(yǔ)言中,使用printf函數(shù)實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條效果可以通過(guò)以下步驟完成:

  1. 定義進(jìn)度條的寬度和總長(zhǎng)度。例如,我們可以設(shè)置寬度為50個(gè)字符,總長(zhǎng)度為100個(gè)字符。
  2. 計(jì)算當(dāng)前進(jìn)度的百分比。
  3. 使用printf函數(shù)輸出空格和"#"字符來(lái)構(gòu)建進(jìn)度條。
  4. 在每次更新進(jìn)度時(shí),重新計(jì)算并輸出進(jìn)度條。

下面是一個(gè)簡(jiǎn)單的示例代碼:

#include <stdio.h>
#include <unistd.h> // for usleep()
#include <time.h>   // for time()

#define BAR_WIDTH 50
#define BAR_LENGTH 100

int main() {
    int progress = 0; // 當(dāng)前進(jìn)度(0-100)
    float total_time = 10.0; // 假設(shè)總時(shí)間為10秒
    time_t start_time = time(NULL);

    while (progress <= 100) {
        // 計(jì)算已經(jīng)過(guò)去的時(shí)間
        double elapsed_time = difftime(time(NULL), start_time);
        progress = (int)(elapsed_time / total_time * 100);

        // 計(jì)算需要輸出的空格數(shù)和"#"字符數(shù)
        int spaces = (BAR_WIDTH - progress / 5) / 2;
        int hashes = progress / 5;

        // 輸出進(jìn)度條
        printf("\r進(jìn)度: |%*s%*s| %d%%", spaces, " ", hashes, " ", progress);
        fflush(stdout); // 確保光標(biāo)位置立即更新

        // 等待一段時(shí)間
        usleep(100000); // 等待100毫秒
    }

    printf("\n"); // 輸出換行符
    return 0;
}

這個(gè)示例代碼會(huì)在控制臺(tái)上輸出一個(gè)動(dòng)態(tài)更新的進(jìn)度條,模擬一個(gè)耗時(shí)任務(wù)的進(jìn)度。

0