Frage

Wie würde ich eine Spinn curser in einem Dienstprogramm drucken, die in einem Terminal läuft Standard C mit?

Ich bin auf der Suche nach etwas, das druckt: \ | / - immer und immer wieder in der gleichen Position auf dem Bildschirm

Danke

War es hilfreich?

Lösung

Sie können die Rück Zeichen (\b) wie folgt verwenden:

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

usw. Sie müssen die fflush(stdout) weil normalerweise stdout, bis Sie die Ausgabe ein Newline gepuffert wird.

Andere Tipps

Hier einige Beispiel-Code. Rufen Sie advance_cursor () jeder einmal in eine Weile, während die Aufgabe abgeschlossen ist.

#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;
}

Ich habe das getan, vor langer Zeit. Es gibt zwei Möglichkeiten.

  1. Verwenden Sie eine Bibliothek wie ncurses Sie über das Terminal steuern zu geben. Das funktioniert gut, wenn Sie eine Menge von dieser Art von Sachen tun mögen. Wenn Sie nur eine dieser in einem kleinen Punkt, es ist offensichtlich viel des Guten.

  2. Drucken ein Steuerzeichen.

Zuerst drucken "/", dann 0x08 (Backspace), dann "-", dann 0x08, dann "\" ....

Der Backspace Charakter bewegt den Cursor-Position einen Raum zurück, lässt aber das aktuelle Zeichen dort, bis Sie sie überschreiben. Holen Sie sich das richtige Timing (so es dreht sich nicht zu schnell oder langsam) und Sie sind golden.

Sie können auch mit \ 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;
}

Es gibt keinen wirklich "Standard" Weg, dies zu tun, da die C-Standardbibliothek ( http: // members.aol.com/wantondeb/ ) keine Funktionen bieten raw Terminal / Konsolenausgabe zu tun.

In DOS / Windows-Konsole, die Standard-ish Art und Weise, es zu tun mit conio.h , während unter Unix / Linux die akzeptierte Bibliothek für diesen Zweck ist ncurses (ncurses im Grunde kapselt die Steuerzeichen Verhalten, das MBCook, in einem Terminal-unabhängige Art und Weise beschreibt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top