2016-05-10 17 views
-1

Deshalb möchte ich Text erscheinen, die besagt, „Laden“, gefolgt von 3 verzögert Punkte, und haben sie wieder von vorn anfangen, wie:Wie erstelle ich eine falsche "Loading ..." Sequenz?

Loading. 
Loading.. 
Loading... 
Loading. 

und so weiter, aber immer auf der gleichen Linie.

Ich schaute in die Verzögerungsfunktion ohne die Datei dos.h (da ich gcc benutze), aber ich bin mir nicht sicher, wie man die Punkte verschwinden und wieder von der ersten beginnen.

+0

Hinweis: '" \ b \ b \ b \ b \ b \ b " – technosaurus

Antwort

1

Es gibt zwei Dinge, die Sie brauchen.

\r oder Wagenrücklauf, bewegt den Cursor zurück zum Anfang der Zeile.

Dann wird normalerweise stdout nichts anzeigen, bis es einen Zeilenumbruch sieht. Dies wird als Pufferung bezeichnet und muss ausgeschaltet werden. Sie können dies mit setvbuf() tun.

Hier ist eine Demonstration.

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

int 
main() 
{ 
    /* Turn off stdout buffering */ 
    setvbuf(stdout, NULL, _IONBF, 0); 

    for(int i = 0; i < 3; i++) { 
     /* Clear the current line by moving to the start, 
      overwriting it with spaces, and going back to the start. 
     */ 
     printf("\r            \r"); 

     printf("Loading"); 

     /* Print ... over 3 seconds */ 
     for(int i = 0; i < 3; i++) { 
      sleep(1); 
      printf("."); 
     } 

     sleep(1); 
    } 

    /* Finish it all up with a newline */ 
    printf("\n"); 

    return 0; 
} 

Es gibt schickere Möglichkeiten, diese using the curses library zu tun, aber \r ist für Ihre Zwecke ausreichend.

1

Sie müssen verwenden '\ r' Charakter:

while (1) { 
    int i; 
    for (i=1; i<=3; i++) { 
     printf("Loading%s\r", i==1 ? "." : i==2 ? "..":"..."); 
     fflush(stdout); 
     sleep(1); /* or whatever */ 
    } 
    printf("%20s\r", " "); 
} 

(Fixed: hinzugefügt fflush(stdout);)

0

Das Zeichen '\ b' bewegt den Cursor um eine Position zurück. Die folgende Sequenz bekommt, was Sie wollen:

printf("Loading."); 
while (not done yet) { 
    delay 
    printf("."); 
    delay 
    printf("."); 
    delay 
    printf("\b\b \b\b"); // erase the last two dots, and move the cursor back again 
}