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 muss int nicht char zu können, halten EOF. Beachten Sie, dass wenn jemand in ein EOF-Zeichen (z.B. Ctrl-D unter Unix), Ihr Programm dreht sich in der while (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...

InformationsquelleAutor mjekov | 2012-05-13
Schreibe einen Kommentar