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 (einenum
(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 sollrunning
aufFALSE
setzen, damit sich die Schleife beenden kann. Denk dran, die Statements einescase
desswitch
-Befehls mitbreak
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.