Probleme indefini (debutant). - C++ - Programmation
Marsh Posté le 03-02-2014 à 19:20:58
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
Code :
|
Tu rajoutes le test, et tu "supprimes" le caractère de l'entrée standard
Code :
|
Tout ça à prendre avec des pincettes, ça fait longtemps que j'ai pas touché à ça
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.
Marsh Posté le 03-02-2014 à 22:35:10
Je crois que j'ai visé un peu haut avec ce contrôle d'erreurs, je ne connais pas ces notions de failbit mais je vais essayer.
J'ai trouvé ca aussi
http://cpp.developpez.com/faq/cpp/ [...] cin_verify
ca a éliminé le probleme de boucle sans fin mais ca deconne maintenant
Code :
|
Il faut que je tapes 2 fois la variable.
En tous cas merci d'avoir répondu aussi vite.
Marsh Posté le 03-02-2014 à 19:10:40
Bonjour je débute en C++ et pour m'entrainer j'ai fait un petit programme pour calculer le volume d'un cylindre. Mais quand on entre un caractère par erreur, une lettre par exemple, le programme entre dans une boucle ou il répété la question à l'infini sans attendre la réponse... Je m'attendais à ce que le programme mette 0 en résultat...Je ne sais pas ou est le problème alors google à eu du mal à m'aider.
Comment afficher le message d'erreur si l'utilisateur entre une lettre ou tout autre caractere que le type double au lieu de cette boucle ? Merci