Explication du code, suite à une demande par MP.
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;
}