scanf wird bei jedem 2. Aufruf ignoriert

Funktion_1 und Funktion_2 rufen sich im Wechsel gegenseitig auf.
Funktion_1 enthält ein scanf, das bei jedem 2. Aufruf nicht ausgeführt wird.

Code:
void fkt1(){
        char c;

        printf("\nfkt1 ");
        scanf("%c",&c);
        fkt2();
}

void fkt2(){
        
        printf("\nfkt2 ");
        fkt1();
}
Die Ausgabe sieht folgendermaßen aus:

fkt1 x // scanf wird aufgerufen.

fkt2
fkt1 // scanf wird ignoriert.
fkt2
fkt1 x // scanf wird aufgerufen.

fkt2
fkt1
fkt2
fkt1 x

... usw

Hat jemand eine Idee, was hier der Fehler sein könnte?
 
Füge mal nach jedem scanf ein fflush() (oder so ähnlich) ein, Damit wird der Tastaturpuffer geleert und es sollte gehen.
 
Genauere Erklärung:

Nach der ersten Eingabe bleibt das "Enter" im Tastaturpuffer und wird beim zweiten Aufruf direkt übermittelt und somit keine Eingabe wahrgenommen, da für den Rechner scheinbar sofort "Enter" gedrückt wurde. Somit muss der Tastaturpuffer gelöscht werden, damit neue Eingaben ordentlich verarbeitet werden können.

Generell ist aber von der Verwendung von scanf abzuraten, da dies sehr schnell zu Problemen führen kann. Besser wäre es gets() zu benutzen und sich den String dann mit sscanf() selbst zu parsen, bzw noch andere eigene Funktionen dafür zu schreiben.
 
Zurück
Oben