Lecture robuste d'un char
Bonjour je cherche a faire une lecture robuste d'un entier et d'un caractère
je viens de coder ceci :
Code:
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;
} |
cela marche parfaitement
mais j'ai voulu l'adapter pour le char
j'ai donc fait :
Code:
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;
} |
mais si je tape "akj" lorsque l'on demande un char il m'affiche 3 fois le msgSaisie
(voici le main si vous voulez)
Code:
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;
} |