2008-10-13 42 views

回答

19

你可以使用退格鍵(\b)是這樣的:

printf("processing... |"); 
fflush(stdout); 
// do something 
printf("\b/"); 
fflush(stdout); 
// do some more 
printf("\b-"); 
fflush(stdout); 

等你需要fflush(stdout)因爲通常標準輸出緩衝,直到輸出一個換行符。

2

很久以前,我已經做到了。有兩種方法。

  1. 使用類似ncurses的庫來控制終端。如果你想做很多這樣的東西,這很有效。如果你在一個小點上只有一個,這顯然是矯枉過正。

  2. 打印控制字符。

首先您打印 「/」,然後0x08的(退格鍵),然後是 「 - 」,然後0x08的,那麼 「\」 ....

退格字符移動光標位置後面有一個空格,但將當前角色留在那裏直到您覆蓋它。獲得正確的時間(所以它不旋轉,快或慢),你是金。

+1

沒有必要使用0x08時,C標準耗材「\ B」爲退格,而這會獨立運作的字符組。 0x08假定爲ASCII。 – Chris 2008-10-13 22:59:56

+0

@Chris Young:我在做了我的之後在其他帖子裏看到了。我沒有必要這麼做,我不記得那是什麼。我查看了一張ASCII表格以查找該號碼,但該表格沒有快捷方式。 – MBCook 2008-10-13 23:13:23

1

由於C標準庫(http://members.aol.com/wantondeb/)沒有提供執行原始終端/控制檯輸出的功能,因此沒有真正的「標準」方式來執行此操作。

在DOS/Windows控制檯,標準的上下的方式做到這一點是conio.h,而Unix/Linux下爲此目的而接受庫ncursesncurses基本上封裝了MBCook介紹控制字符的行爲,在終端獨立的方式)。

10

下面是一些示例代碼。在任務完成時,每隔一段時間調用一次advance_cursor()。

#include <stdio.h> 

void advance_cursor() { 
    static int pos=0; 
    char cursor[4]={'/','-','\\','|'}; 
    printf("%c\b", cursor[pos]); 
    fflush(stdout); 
    pos = (pos+1) % 4; 
} 

int main(int argc, char **argv) { 
    int i; 
    for (i=0; i<100; i++) { 
    advance_cursor(); 
    usleep(100000); 
    } 
    printf("\n"); 
    return 0; 
} 
+0

它沒有工作#include 2014-12-03 12:38:03

2

您還可以使用\ r

#include <stdio.h> 
#include <unistd.h> 

void 
advance_spinner() { 
    static char bars[] = { '/', '-', '\\', '|' }; 
    static int nbars = sizeof(bars)/sizeof(char); 
    static int pos = 0; 

    printf("%c\r", bars[pos]); 
    fflush(stdout); 
    pos = (pos + 1) % nbars; 
} 

int 
main() { 
    while (1) { 
     advance_spinner(); 
     usleep(300); 
    } 

    return 0; 
}