Ton problème doit venir du fait que cin ne peut pas mettre une lettre dans une variable de type double. Sauf que j'imagine que du coup, le caractère sur l'entrée standard n'est jamais supprimé. Du coup quand ton programme réexécute l'instruction cin >> r, il retente de mettre le caractère dans la variable double. Ce qui provoque ta boucle infinie.
Je crois que tu peux tester si tu as reçu une valeur adéquate de ton entrée standard en testant le failbit de cin. Si tu n'as pas reçu la donnée que tu voulais (dans ton cas, si tu as reçu une lettre au lieu d'un chiffre), tu dois pouvoir "nettoyer" cin de manière à ce que le caractère soit ignoré.
Donc en gros dès que tu fais
Tu rajoutes le test, et tu "supprimes" le caractère de l'entrée standard
Code :
cin >> r; if (!cin) { cout << "Erreur d'entree" << endl; cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max()) }
|
Tout ça à prendre avec des pincettes, ça fait longtemps que j'ai pas touché à ça ![:D :D](https://forum-images.hardware.fr/icones/biggrin.gif)
EDIT: Je me suis renseigné, cin.clear() ne supprime pas du tout la mauvaise entrée utilisateur de cin. A priori il faut utiliser cin.ignore(std::numeric_limits<std::streamsize>::max()) pour ignorer tout ce qui a été écrit sur l'entrée standard.
Message édité par WiiDS le 03-02-2014 à 19:26:36
---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010