2014-02-05 35 views
1

我想用C創建一個加載器動畫。我無法弄清楚,所以我儘量保持簡單。我試圖做這樣的事情:首先 它會出現:創建一個加載動畫

[                    ] 
[|                    ] 
[||                    ] 

等等...

我想使用睡眠功能,所以它會像它的實際加載但不能太慢,增加百分比會很好,我想如果它是一個for循環與「我」作爲一個整數計數其移動比它將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++; 
    } 
} 

,它的打印噸線,而不是覆蓋第一.... 怎麼辦?

+0

代碼請.... – suspectus

+0

你不能只是建立一個char數組並顯示在括號集之間使用for循環?所以你首先循環訪問一個''的數組,然後在這個數組結尾處,將數組中的第一項改爲'*',然後再次循環,等等。當然,如果你想要一個實際的進度條,在後臺發生的東西,你需要使用線程等。 – Annabelle

+0

你是說這是一個「假」的進度條嗎?在顯示欄中沒有發生任何事情? – ooga

回答

0

這裏是一個面向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); 
    } 
} 
+1

工作,謝謝:) 但是,你能告訴我什麼是我的錯,所以我可以學習下一次? – user3220493

+0

您的第二次嘗試只是線條太長,因此它們會繞到下一行,然後被「\ r」覆蓋,然後是下一行。看我的編輯。 – ooga

0

只要把你的功能(S),要求初始化程序的命令之間,所以你看到真正的負載發生如編譯器的功能,加載圖像,鉗工機,灌裝臨時文件,....

更改光標位置將取決於平臺,但您可以使用一個空字符串來精確填充整個屏幕。反覆打印更新的字符串應該看起來像是一個進步。

首先80(一行的大小?)字符可以是你的加載指示器,其餘的可能是空間或一些「窗口」 - 看美好的東西。 (例如╚作爲窗口的角落)

例如,字符串的第0個字符是「[」,第80個字符是「]」,而1到79是「」或「|」取決於裝載水平。您可以使用函數來填充字符數組/字符串並將輸出顯示給屏幕。

0

打印在一個單一的呼叫:

printf("\r[%-100s]", stringWithBars); 

所以在循環打印如上整條生產線,append「條」的字符串,並繼續循環。

+0

由於某種原因,不工作,因爲它仍然打印出很多行 – user3220493