int getValue() { int i = 0; bool stop = false; do { std::cout << "Entrez une valeur entière correcte : "; std::string buff; // Ici on récupère une ligne (chaîne de caractère) pris sur std::cin, que l'on stocke dans "buff". std::getline(std::cin, buff); // On créer ensuite un flux de chaîne de caractère initialisé avec le contenu de "buff". std::istringstream myStream(buff); // Ensuite on on "pousse" ce qu'il y a dans "buff" vers i. C'est à dire on tente une conversion de la chaîne // de caractère "buff" en entier. Le résultat est alors stocké dans i, sous forme d'entier. // Si on arrive à "pousser", donc si la conversion a réussi, ça renvoie vraie, sinon faux. // On stocke alors dans stop, si l'opération à réussi. // On pourrait aussi l'écrire comme ceci: // if (myStream >> i) // Tenter de convertir "myStream" en entier et dans "i" // stop = true; // Si la conversion a réussi // else // stop = false; // Si la conversion a raté stop = myStream >> i; // Tant qu'on a pas réussi à convertir ce qu'on a récupérer sur std::cin en entier, on // on continue de demander quelque chose. if (!stop) { std::cerr << "Valeur incorrecte !" << std::endl; } } while (!stop); // Si on est arrivé ici, c'est que la conversion a réussi, et que le résultat est dans i. Donc on le renvoi. return i; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include #include <sstream> int getValue() { int i = 0; bool stop = false; do { std::cout << "Entrez une valeur entière correcte : "; std::string buff; std::getline(std::cin, buff); std::istringstream myStream(buff); stop = myStream >> i; if (!stop) { std::cerr << "Valeur incorrecte !" << std::endl; } } while (!stop); return i; } int main() { int values[10]; for (int i = 0; i < 10; ++i) { std::cout << "Valeur " << i << "" << std::endl; values[i] = getValue(); } std::cout << std::endl << "Valeur entrees :" << std::endl; for (int i = 0; i < 10; ++i) std::cout << "Valeur " << i << " :" << values[i] << std::endl; return 0; }