butterblume
Goto Top

Menüauswahl in C

Hallo Zusammen, ich habe folgendes Testprogramm geschrieben:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main () {
    
    printf ("Waehlen Sie ein Menu aus:\n\n");  
     printf ("1. \n");  
     printf ("2. \n");  
     printf ("3. \n");  
     printf ("4. \n");  
     printf ("5. \n");  
     printf ("6 Beenden\n\n");  
    printf ("Bitte Ihre Wahlnummer eingeben: ");  
    
    char c;
    c = getchar ();               
    
    switch (tolower (c)) {
           
      case '1':  
      printf ("\nTest\n\n");  
      break;
      
      case '2':  
      printf ("\nTest\n\n");  
      break;
      
      case '3':  
      printf ("\nTest\n\n");  
      break;
      
      case '4':  
      printf ("\nTest\n\n");  
      break;
      
      case '5':  
      printf ("\nTest\n\n");  
      break;
      
      case '6':  
      printf ("\nDas Programm wird beendet!\n\n");  
      break;
      
      default:
      printf ("\n\nFalsche Eingabe\n\n");  
      break;
      }
      
        system ("PAUSE");  
        return 0;
        }

Nun möchte ich gerne, dass es nach der Durchführung der Auswahl wieder zum Menü zurückkommt. Habe sowas schon mal in der Schule gemacht, aber wieder vergessen.

Danke für Ihre Hilfe.

Lg, Kristina

*EDIT*Neue Version***

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main () {
    
    bool verlassen = false;
    
    do { 
    printf ("Waehlen Sie ein Menu aus:\n\n");  
     printf ("1. \n");  
     printf ("2. \n");  
     printf ("3. \n");  
     printf ("4. \n");  
     printf ("5. \n");  
     printf ("6 Beenden\n\n");  
    printf ("Bitte Ihre Wahlnummer eingeben: ");  
    
    char c;
    c = getchar ();               
    
    switch (tolower (c)) {
           
      case '1':  
      printf ("\nTest\n\n");  
      break;
      
      case '2':  
      printf ("\nTest\n\n");  
      break;
      
      case '3':  
      printf ("\nTest\n\n");  
      break;
      
      case '4':  
      printf ("\nTest\n\n");  
      break;
      
      case '5':  
      printf ("\nTest\n\n");  
      break;
      
      case '6':  
      printf ("\nDas Programm wird beendet!\n\n");  
      verlassen = true;
      break;
      
      default:
      printf ("\n\nFalsche Eingabe\n\n");  
      break;
      }
      } while (!verlassen);
      
        system ("PAUSE");  
        return 0;
        }

Die Kästchen werden automatisch 2 Mal ausgeführt....nein...nicht die Kästchen, die Menüauswahl wird doppelt ausgeführt, beim zweiten Mal ohne Zeichen-Eingabe...ich weiss nicht warum. Kann mir jemand helfen???

Lg, Kristina

Content-Key: 58677

Url: https://administrator.de/contentid/58677

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: filippg
filippg 10.05.2007 um 12:30:39 Uhr
Goto Top
Hallo,

du kannst alles, was bisher in main() steht in eine do..while-Schleife packen:

int main() {
bool verlassen = false;
do {
printf("Waehlen Sie ein Menu aus:\n\n");
....
switch...
..
case '6':
verlassen = true;
...
} while (!verlassen);
}

Filipp
Mitglied: Butterblume
Butterblume 10.05.2007 um 13:34:59 Uhr
Goto Top
Das ist jetzt super, nun habe ich noch ein Problem...jede Ausführung "Test" wird zuerst ausgeführt, jedoch dann noch enen zweiten Mal automatisch, wo dann einfach nichts eingegeben wird.
Immer doppelt...was kann das sein?
Und noch eine Frage? "break" wird trotzdem noch nach jedem "case" am Schluss geschrieben??

Lg, Kristina
Mitglied: miniversum
miniversum 10.05.2007 um 16:43:41 Uhr
Goto Top
Ich würde kein
Do{
...
}While(...)

sondern ein
While(...)
{
...
}
machen.

zum Break:
der break ist so richtig, sonst würde er z.B. nach dem case 3 (wenn du dort das break vergessen solltest) direkt weiter in Case 4 laufen und das dort auch ausführen. Könntest es aber je nach Anwendungsfall aber auch absichtlich weglassen z.b. bei irgentwelchen Automaten im Initiallisierungsschritt.

miniversum
Mitglied: Butterblume
Butterblume 10.05.2007 um 16:52:56 Uhr
Goto Top
Also es funktioniert mit beidem do-while und while-Schleife gut...hab einfach jetzt 3 versionen. ich hab's rausgefunden wieso es doppelt war, man sollte den auspuffer mit fflush(stdin) leere.

lg, kristina