Wie schreibt man einen Konsolen-Menü in der ANSI/ISO-C?
Ich versuche zu schaffen, ein einfaches Programm in c, wo der Benutzer hat die Wahl zwischen mehreren Optionen:
char command = '1';
while(command!='0') {
printf("Menu:\n");
printf("1. First option\n");
printf("2. Second option\n");
printf("0. Exit\n");
printf("Choose: 0,1,2?: ");
command = getchar();
while(getchar()!='\n');
switch(command) {
case '0': break;
case '1': functionCall1(); break;
case '2': functionCall2(); break;
}
}
Das problem mit meinem code ist, dass jedes zweite mal, wenn ich 1,2 oder 0, nichts passiert, nur das Menü druckt sich wieder. Mit dem debugger kann ich sehen, dass der Wert der Befehl, nach Befehl = getchar() entspricht ", jedes zweite mal. Ich dachte, dass das Essen der neue-Zeile-Zeichen ist genug?
- Dein Beispiel läuft OK für mich da ist, und wenn ich functionCall1 und functionCall2 etwas drucken, kann ich sehen, dass es funktioniert wie beworben. Aber vielleicht ist es anders mit deinem compiler?
- Die Art der
command
mussint
nichtchar
zu können, haltenEOF
. Beachten Sie, dass wenn jemand in ein EOF-Zeichen (z.B. Ctrl-D unter Unix), Ihr Programm dreht sich in derwhile (getchar() != '\n') ;
Schleife. - ein
do { ... } while('0' != command);
wäre ein eleganter konstruieren - Ich habe nicht das Gefühl, dass Yoda Bedingungen sind elegant an alle.
- Ja getestet habe ich es mit vereinfachten funtionCall1 und functionCall2 und es funktioniert ok, offensichtlich ist das problem mit meinen Funktionen. Danke Jungs
- für Ihren Kommentar! :p Nichts, wie die rechts-Konstrukt zur Verbesserung der Programm-Verständlichkeit! Natürlich braucht man, um zu verstehen, was angemessen ist und Wann...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, mein benutzerdefiniertes Menü, implementiert habe ich es mein Leben erleichtern, wenn ich mit Programmen, die enthält eine Auswahl mehrerer Operationen.
Menü schiffbar ist (Pfeile:nach oben, unten, Links, rechts), und für die Auswahl müssen Sie nur die enter-Taste drücken, Menü-Ausrichtung kann vertikal oder horizontal, Polsterung kann eingestellt werden, um eine Gruppe von Elementen(Kinder), Kind Ausgangsposition, und aktualisieren Sie Sie mit Verzögerung.
Menü aufrufen Beispiel (vertikal):
Das wichtigste ist, weil die Implementierung der Funktion nimmt nur 60 Zeilen code.
Menü Umsetzung:
Werden kann, sollten Sie versuchen, zu verwenden
int x
als Schlüssel zu verwenden, eine wünschenswerte Befehl, kann so sein:Habe ich es in meiner früheren Hausaufgaben. Hoffe, es wird für Sie nützlich sein