Forum Solarus-Games francophone

Jeux amateurs => Programmation => Discussion démarrée par: compositeur le 22 Mars 2012 à 20:02

Titre: [C++] Boucle qui n'en finit pas
Posté par: compositeur le 22 Mars 2012 à 20:02
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.
Titre: Re : [C++] Boucle qui n'en finit pas
Posté par: Neo2 le 22 Mars 2012 à 20:25
Essaye de rajouter un petit "cin.ignore(std::numeric_limits<int>::max(),'\n');" dans ta boucle.
Titre: Re : [C++] Boucle qui n'en finit pas
Posté par: compositeur le 22 Mars 2012 à 20:45
Tout fonctionne grâce à cette ligne, peut on m'expliquer le fonctionnement de cette magie noire ?
Titre: Re : [C++] Boucle qui n'en finit pas
Posté par: Noxneo le 23 Juin 2012 à 21:11
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 :$