Bonjour je cherche a faire une lecture robuste d'un entier et d'un caractère
je viens de coder ceci :
cela marche parfaitement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 unsigned int saisirNombreNaturel(const char* msgSaisie) { unsigned int n; cout << msgSaisie << flush; cin >> n; if (cin.fail()) { // teste l'état de cin cout << "l'entrée n'est pas valide..." << endl; cin.clear(); // remets cin dans un état lisible cin.ignore(INT_MAX, '\n'); // ignore toute la ligne de données } return n; }
mais j'ai voulu l'adapter pour le char
j'ai donc fait :
mais si je tape "akj" lorsque l'on demande un char il m'affiche 3 fois le msgSaisie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char saisirChar(const char* msgSaisie) { char c; cout << msgSaisie << flush; cin.get(c); if (cin.fail()) { // teste l'état de cin cout << "l'entrée n'est pas valide..." << endl; cin.clear(); // remets cin dans un état lisible cin.ignore(numeric_limits<streamsize>::max(),'\n'); } return c; }
(voici le main si vous voulez)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int main() { unsigned int nb; char c; char msg[]="Saisir un nombre entre 1 et 5 : "; do { nb=saisirNombreNaturel(msg); } while ((nb < 1) || (nb > 5)); cout <<"Nombre lu : " << nb << endl; do { c=saisirChar("Saisir une lettre entre a et e : "); } while (c < 'a' || c > 'e'); cout <<"Lettre lue : " << c << endl; system("pause"); return 0; }
Partager