Switch Abfrage nach falsche Eingabe wieder von vorne starten.
-
switch(auswahl) { case 1: start(); break; case 5: hilfe(); break; case 6: fortsetzen(); break; case 99: return 0; break; default: printf("Das war Mist. Merkste selber wah? Wie willst du hier weiterkommen wenn du schon bei der ersten Auswahl etwas eingibst was es nicht giebt? Ich bin ja nicht so versuchs nochmal ;)"); break;
Also diese Switch Abfrage habe ich. Ich will das wenn jemand was anderes ausser 1 5 6 oder 99 wieder an den Anfang der Switch Abfrage kommt.
3 Ideen sind mir gekommen die aber alle nicht sonderlich Toll sind.
1. Eine While schleife machen die Abfragt ob 1 5 6 oder 99 eingegeben wurde und die switch abfrage danach machen. Finde ich persönlich die beste Lösung ist aber aufwändig wenn ich noch 50 switchabfragen mache vor jede ne Whileschleife zu machen.
2. Die ganze switch abfrage in ne Funktion tun die bei default dann wieder aufgerufen wird. Ist noch aufwendiger als die while Schleife und wird bei 50 Abfragen im Programm sehr unübersichtlich.
3. Mit dem Goto wieder zurück hüpfen. Ich weiß grad garnicht ob man per goto auch zurück hüpfen kann. So oder so ist das aber schlechter programmierstyle den ich lieber vermeiden würde.
Gibts noch eine vielleicht sehr unkompliziertere Methode die ihr mir empfehlen könnt? Danke für die Hilfe
-
Eine do-while-Schleife um das
switch
, die überprüft obauswahl != 99
ist.
-
Richtig lesen wäre besser
99 ist ja auch ein gültiger Fall.
Du kannst im default ein Flag (eine Variable die vorher 0 war) auf 1 setzen und das bei der do-while Schleife abfragen.
-
Das gefällt mir. Bei default auf 1 und wenn 1 dann nochmal die schleife...Vielen Dank DirkB
-
Guck doch mal hier:
http://www.c-plusplus.net/forum/307280-10
-
So ich hab jetzt das hier:
do { scanf("%d",&auswahl); switch(auswahl) { case 1: start(); break; case 5: hilfe(); break; case 6: fortsetzen(); break; case 42:printf("DIE ANTWORT AUF DAS LEBEN DAS UNIVERSUM UND ALLES. Aber leider keine gültige Eingabe im Hauptmenu. \n\nEingabe:"); defaulter=1; case 99:return 0; break; default:printf("\nDas war Mist. Merkste selber wah? Wie willst du hier weiterkommen wenn du schon bei der ersten Auswahl etwas eingibst was es nicht giebt? Ich bin ja nicht so versuchs nochmal ;) \n\nEingabe:"); defaulter=1; break; } } /* Ende switch */ while (defaulter==1);
Ein lustigen Fall hab ich noch entdeckt. Wenn ich garnichts eingebe sondern einfach enter drücke dann wird die Schleife unkontrolliert wiederholt...wieso das?
Edit: Hat sich erledigt hab das break; bei case 42 vergessen. Und hab die Leere Eingabe natürlich ausporbiert nachdem ich das erste mal 42 eingegben habe. Da hat dann das break; gefehlt
-
Odatas schrieb:
...
2. Die ganze switch abfrage in ne Funktion tun die bei default dann wieder aufgerufen wird. Ist noch aufwendiger als die while Schleife und wird bei 50 Abfragen im Programm sehr unübersichtlich.
...Wieso? Ganz im Gegenteil. Bei vielen Abfragen kannst du so deine main-Funktion,
eher klein und überschaubar halten.#include <stdio.h> int menu1(void) { int auswahl = 0; scanf("%d", &auswahl); switch(auswahl) { case 1: start1(); break; case 5: hilfe1(); break; case 6: fortsetzen1(); break; case 99: return 0; break; default: printf("Das war Mist. Merkste selber wah? Wie willst du hier weiterkommen wenn du schon bei der ersten Auswahl " "etwas eingibst was es nicht giebt? Ich bin ja nicht so versuchs nochmal ;)\n"); auswahl = 0; break; } return auswahl; } // ... int menu50(void) { int auswahl = 0; scanf("%d", &auswahl); switch(auswahl) { case 1: start50(); break; case 5: hilfe50(); break; case 6: fortsetzen50(); break; case 99: return 0; break; default: printf("Das war Mist. Merkste selber wah? Wie willst du hier weiterkommen wenn du schon bei der fuenfzigsten Auswahl " "etwas eingibst was es nicht giebt? Ich bin ja nicht so versuchs nochmal ;)\n"); auswahl = 0; break; } return auswahl; } void clear_input(void) { int c; while ((c = getchar() != '\n') && c != EOF ) ; } int main(void) { int auswahl = 0; while(0 == (auswahl = menu1())) clear_input(); while(0 == (auswahl = menu50())) clear_input(); return 0; }