[C++] Boucle qui n'en finit pas

Démarré par compositeur, 22 Mars 2012 à 20:02

0 Membres et 1 Invité sur ce sujet

Salut à tous  !
J'ai voulu tester dans une petite fonction main une saisie sécurisée, pour l'exemple, j'ai voulu faire rentrer à l'utilisateur un nombre, et seulement un nombre. Voici à quoi ressemble mon code :

#include <iostream>
using namespace std;

int main()
{
    int saisie = 0;
    do
    {
        cout<<"veuillez saisir un nombre \n";
        cin.clear();
        cin>>saisie;
    }
    while(cin.fail());
    return 0;
}



Lorsque je rentre un nombre, tout se passe bien, mais lorsque je rentre autre chose, comme un caractère par exemple, la phrase "veuillez saisir un nombre" s'affiche en boucle sans me laissez saisir quoi que ce soit.

Essaye de rajouter un petit "cin.ignore(std::numeric_limits<int>::max(),'\n');" dans ta boucle.

Tout fonctionne grâce à cette ligne, peut on m'expliquer le fonctionnement de cette magie noire ?

Cette ligne dit à std::cin d'ignorer toute saisie sauf les entiers inférieurs à MAX_INT (std::numeric_limits<int>::max()) et les retours à la ligne ('\n')
Pour plus d'infos cf la doc de std::cin

Oui je rattrape tous mes topics 6 mois plus tard :$