HARALD MELCHER

Startrek in C

Kommandos eingeben

Die Hauptschleife des Programms nimmt jeweils ein Kommando entgegen, und arbeitet es ab. So lange, bis das Kommando das “Ende”-Kommando ist. Das klingt schon ziemlich nach einer do...while-Schleife.

Vor die Schleife kommt eine bool-Variable running, die die Ende-Bedingung der Schleife darstellt. Die Schleife arbeitet so lange, bis sie das Ende-Kommand erhält: Der Kommando-Parser in der Schleife setzt dann running auf FALSE und die Schleife beendet sich. Daher ist running mit TRUE initialisiert.

In die Schleife kommt:

  • eine Eingabeaufforderung der Art “Gib Kommando:”, gefolgt von fflush(), um den Puffer zu leeren. Das ist Copy und Paste von oben.
  • Einlesen eines Eingabestrings mit fgets() in einen Buffer command, und Entfernen des abschließenden Newline. Das ist Copy und paste von oben.
  • der Aufruf der zu schreibenden Funktion lowercase(char*) (s.u.), die den String an der Adresse des übergebenen Stringpointers in Kleinbuchstaben umsetzt.
  • der Aufruf der zu schreibenden Funktion int parse_command(char*) (s.u.), die versucht, das Kommando im Argument zu erkennen, und den Commande-Code (ein enum (s.u.)) für das erkannte Kommando zurückgibt.
  • ein switch-Statement, das je nach Kommando etwas anderes tut. Du wirst mit dem Kommando für exit anfangen: es soll running auf FALSE setzen, damit sich die Schleife beenden kann. Denk dran, die Statements eines case des switch-Befehls mit break abzuschließen.

void lowercase(char *) geht Zeichen für Zeichen bis zum Stringende ('\0') durch und konvertiert jedes Zeichen in Kleinbuchstaben – es überschreibt dabei die vorhanden Großbuchstaben.


Enums sind menschenverständliche Zahlenwerte. Vor Einführung der enums gab es in C nur #define als Möglichkeit, Zahlen einen Namen zuzuweisen. Du verwendest für die Kommandos ein Enum, das den enum-Bezeichnungen Werte ab Null aufsteigend zuweist:

enum {unknown, exit, help};

Damit erhält unnown den Wert 0, exit den Wert 1 und help den Wert 2.


int parse_command(char* command) prüft ab, ob die ersten drei Buchstaben des Kommandos mit einem der vorgegebenen Kommandos übereinstimmt und gibt das passende Enum zurück. (Die Funktion void strncmp(char*, char*, long) aus <string.h> ist dein Freund.)

  • wenn das Kommando mit “exi” anfängt, dann gib das Enum exit zurück
  • wenn das Kommando mit “hel” anfängt, dann gib das Enum help zurück
  • hier baust du weitere Kommandos ein

Jetzt müsste das Kommando “exit” bereits funktionieren. Das Kommando “help” ruft die Funktion void do_help() auf, die erklärt, welche Kommandos es gibt – und vielleicht auch ein bisschen, wie das Spiel funktioniert. Mit jedem neuen Kommando erweiterst du die do_help-Funktion um eine Erklärung desselben.