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

Printed on: April 16, 2024 at 08:04 o'clock

Member: filippg
filippg May 10, 2007 at 10:30:39 (UTC)
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
Member: Butterblume
Butterblume May 10, 2007 at 11:34:59 (UTC)
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
Member: miniversum
miniversum May 10, 2007 at 14:43:41 (UTC)
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
Member: Butterblume
Butterblume May 10, 2007 at 14:52:56 (UTC)
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