C Dauerschleife bei Abfrage mittels scanf() in C

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
696
Hallo.

Hier zunächst der Code:
C:
// Spiel.anzSpieler => unsigned char
// spiel Spiel = {.anzSpieler = 0}

void frageAnzahlSpieler(const unsigned char anzSpieler_min, const unsigned char anzSpieler_max, spiel *Spiel){

    int check;

    do{
   
        printf("Gib die Anzahl der Spieler ein.\n");
        printf("Min: %d / Max: %d\n", anzSpieler_min, anzSpieler_max);
        check = scanf("%hhu", &Spiel->anzSpieler);    // %hhu -> unsigned char
        printf("check: %d, anzSpieler: %hhu\n", check, (*Spiel).anzSpieler);
    }
    while(((*Spiel).anzSpieler < anzSpieler_min) || ((*Spiel).anzSpieler > anzSpieler_max) || (check != 1));

}

/*output:
Gib die Anzahl der Spieler ein.
Min: 2 / Max: 5
> d
check: 0, anzSpieler: 0
Gib die Anzahl der Spieler ein.
Min: 2 / Max: 5
check: 0, anzSpieler: 0
Gib die Anzahl der Spieler ein.
Min: 2 / Max: 5
check: 0, anzSpieler: 0
...
...
*/


Folgendes Problem. Ich frage über eine Funktion die Anzahl der Spieler ab.
Wenn ich interger (unsigned char) Werte eingebe, wird die Funktion auch super abgefragt. Aber wenn ich, wie hier im Beispiel ein "d" eingebe, also einen "char" Wert, läuft die Schleife in einer Dauerschleife.

Warum ist das so? Müsste die Schleife nicht beim nächsten Aufruf von scanf() stehen bleiben und auf den Input des Benutzers warten?

Beste Grüße
 
Ich weiß nicht genau, ob du das meinst, aber die Eingabe bleibt bei scanf() im Puffer. Eine möglich Alternative wäre z.B. getline() oder eben manuell den Puffer flushen.
 
Top! Das war es. Wenn ich den Puffer über:
C:
char z;
do{
    z = getchar()
}while(z != '\n' && z != EOF);

leere, funktioniert es. Ich danke Dir !
 
Zurück
Oben