Si no recuerdo mal, el problema viene en que si introduces un valor que no sea un entero, se produce un error interno y tendrías que limpiar la entrada de datos mediante clear.
Prueba lo siguiente:
Código C++:
Ver originalusing namespace std;
int main()
{
do {
int key;
cout << "Presiona el numero 4." << endl;
cin >> key;
if(!cin.good()){
cin.clear();
cin.ignore( INT_MAX, '\n' );
}
}
while( key!=4 );
}