cin para un int que ingresa un char hace que el bucle que se supone que verifique la entrada se vuelva salvaje

¡Esta es una función de mi juego que pedirá entrada y cin en "iAuswahl"! Luego, el bucle while comprueba si es uno de los valores que deseo 1-9; si no, se activa y se supone que debe solicitar una nueva entrada. Bruja lo hace por int. Pero si introduzco un char como r, se volverá loco y simplemente me devolverá mi cout y me saltaré el cin! Mis preguntas son ¿por qué lo hace y cómo lo detengo?

void zug(string sSpieler, int iDran){
    int iAuswahl;
    char cXO = 'O';

    if (iDran == 1)
    {
        cXO = 'X';
    }

    cout << sSpieler << ", Sie sind am Zug. Bitte waehlen sie eins der Felder.\n" << endl;
    grafik();
    cout << "Sie sind >> " << cXO << " <<." << endl;
    cin >> iAuswahl;
    cout << endl;

    while ( 
        iAuswahl != 1 
        && iAuswahl != 2 
        && iAuswahl != 3 
        && iAuswahl != 4 
        && iAuswahl != 5 
        && iAuswahl != 6 
        && iAuswahl != 7
        && iAuswahl != 8 
        && iAuswahl != 9
    )
    {
        cout << "Kein gültiges Feld bitte wählen sie noch einmal!\n" << endl;
        cin >> iAuswahl;
    }
    feldfuellen(iAuswahl, cXO);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta