Entrada de usuario de enteros - Manejo de errores

Estoy teniendo algunos problemas con ciertas áreas de entrada de mi programa. Hay algunas partes donde el usuario ingresa un número entero específico. Incluso si ingresan el valor incorrecto, todo está bien y excelente, pero noté que si ingresan algo que no sea de tipo entero como 'm', entonces el mensaje de error aparecerá repetidamente.

Tengo un par de funciones que tienen entrada de enteros en ellas. Aquí hay uno para un ejemplo.

void Room::move(vector<Room>& v, int exone, int extwo, int exthree, int current)
{
    v[current].is_occupied = false;
    int room_choice;
    cout << "\nEnter room to move to: ";
    while(true)
    {
        cin >> room_choice;
        if(room_choice == exone || room_choice == extwo || room_choice == exthree)
        {
            v[room_choice].is_occupied = true;
            break;
        }
        else cout << "Incorrect entry. Try again: ";
    }
}

[Solucionado]

void Room::move(vector<Room>& v, int exone, int extwo, int exthree, int current)
{
    v[current].is_occupied = false;
    int room_choice;
    cout << "\nEnter room to move to: ";
    while(true)
    {
        cin >> room_choice;
        if(room_choice == exone || room_choice == extwo || room_choice == exthree)
        {
            v[room_choice].is_occupied = true;
            break;
        }
        else if(cin.fail())
        {
          cin.clear()
          cin.ignore()
          cout << "Incorrect entry. Try again: ";
        }
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta