Programm wiederholen mit do while Schleife
-
Hallo, habe nur ein kleines Problem. Ich möchte gerne dass mein Programm nach der Ausführung nochmals wiederholt wird. Also es wird gefragt, Wollen Sie nochmals wiederholen? (j)a/nein.
Ich lese die Antwort mit scanf ein.
Das hier war mein Ansatz, funktioniert allerdings nicht: scanf("%c",&response);
So funktioniert es: scanf(" %c%*c",&response); Habe diese Lösung irgendwo gefunden.Nur verstehe ich nicht warum die Zweite Lösung funktioniert, allerdings mein Ansatz nicht.
Kann mir jemand das mal kurz erklären? Danke!#include <stdio.h> #include <stdlib.h> void verdoppeln(int); void halbieren(int); void halbieren(int zahl) { zahl /= 2; printf("Halbiert : %d\n", zahl); } void verdoppeln(int zahl) { zahl *= 2; printf("Verdoppelt : %d\n", zahl); } int main(void) { int wahl, z; char response; do { printf("Bitte geben Sie eine Zahl ein : "); scanf("%d",&z); printf("Wollen Sie diese Zahl\n"); printf("\t1.)verdoppeln\n\t2.)halbieren\n\nIhre Wahl : "); scanf("%d",&wahl); switch(wahl) { case 1 : verdoppeln(z); break; case 2 : halbieren(z); break; default : printf("Unbekannte Eingabe\n"); } printf("Wollen Sie nochmals wiederholen? (j)a/nein "); fflush(stdout); scanf(" %c%*c",&response); } while (response=='j'); return EXIT_SUCCESS; }
-
Nach dem Einlesen von
wahl
steht noch ein Newline im Streamstdin
das dann zum Quasi überspringen des Lesens vonresponse
führt. Mit dem Leerzeichen vor%c
weist Duscanf()
an jeglichen Whitespace zu verwerfen, erst das nächste nicht Whitespace wird dann nachresponse
geschrieben. Das folgende%*c
weistscanf()
an das folgende Zeichen - wahrscheinlich ein Newline zu verwerfen.