Eingabeüberprüfung
-
Hallo,
ich hab ein Problem mit der Eingabe von der Konsole aus.CTerminal::fnAbfrage() { printf("\nAnzahl der Tipps:"); do { scanf("%i",&iAnzahl); if(iAnzahl < 1 || iAnzahl > 6) { //printf("%s\n",FEHLER); printf("Falsche Eingabe!"); fnAbfrage(); } } while(iAnzahl < 1 || iAnzahl > 6); switch(iAnzahl) { case '1': printf("\n1 Tipp:"); break; case '2':printf("\n2 Tipps:"); break; case '3': printf("\n3 Tipps:"); break; case '4': printf("\n4 Tipps:"); break; case '5': printf("\n5 Tipps:"); break; case '6': printf("\n6 Tipps:"); break; default : printf("%s\n",FEHLER); fnAbfrage(); } }
Der erste Fehler ist, dass bei Eingabe von Buchstaben das Programm spinnt, liegt ja daran, dass ich keine char einlese.
Der zweite Fehler ist, dass man immer in die default-Anweisung gelangt.Wie kann ich die Probleme lösen bzw. sieht eine Verwendung mit char aus.
-
Deine Bedingung bei der Überprüfung des Zahlenbereiches stimmt nicht. Denk nach, wann die Bedingung deiner Schleife true wird.
-
while(iAnzahl > 1 || iAnzahl < 6);
Besser?
-
zu 1.
Du machst eine Schleife und einen rekursiven Funktionsaufruf!? Das kann nicht funktionieren. Nimm den Funktionsaufruf wieder raus. Des weiteren musst du noch das Enterzeichen, welches im Lesepuffer steht, auslesen.
Das kannst du mit fflush(stdin) machen (jetzt werden wohl gleich wieder einige Leute meckern :D, Alternativen findest du wahrscheinlich in den FAQ).
zu 2.
Kein Wunder das deine switch-case Anweisung nicht funktioniert. Du fragst auf Zeichen ab und nicht auf integer Werte.
Habs dir mal angepasst
fnAbfrage() { int iAnzahl; do { printf("\nAnzahl der Tipps: "); fflush (stdin); scanf("%i",&iAnzahl); if(iAnzahl < 1 || iAnzahl > 6) { //printf("%s\n",FEHLER); printf("Falsche Eingabe!"); //fnAbfrage(); } } while(iAnzahl < 1 || iAnzahl > 6); switch(iAnzahl) { case 1: printf("\n1 Tipp:"); break; case 2:printf("\n2 Tipps:"); break; case 3: printf("\n3 Tipps:"); break; case 4: printf("\n4 Tipps:"); break; case 5: printf("\n5 Tipps:"); break; case 6: printf("\n6 Tipps:"); break; default : printf("%s\n",FEHLER); fnAbfrage(); } }
-
curry-king schrieb:
Deine Bedingung bei der Überprüfung des Zahlenbereiches stimmt nicht. Denk nach, wann die Bedingung deiner Schleife true wird.
Wieso nicht?
Passt doch
-
Super und Danke.
-
Horst2 schrieb:
curry-king schrieb:
Deine Bedingung bei der Überprüfung des Zahlenbereiches stimmt nicht. Denk nach, wann die Bedingung deiner Schleife true wird.
Wieso nicht?
Passt dochStand wohl neben der Kappe! SORRY! (für meine Dummheit)