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 Stream stdin das dann zum Quasi überspringen des Lesens von response führt. Mit dem Leerzeichen vor %c weist Du scanf() an jeglichen Whitespace zu verwerfen, erst das nächste nicht Whitespace wird dann nach response geschrieben. Das folgende %*c weist scanf() an das folgende Zeichen - wahrscheinlich ein Newline zu verwerfen.


Anmelden zum Antworten