Salut à tout le monde
Je voudrais avoir vos retours et conseilles. J’ai une petite application qui fonctionne en console et mon problème se situe au niveau de la récupération d’une donnée entrée dans la console. Pour récupérer un integer j’utilise tout simplement un std: :cin» et pour récupérer un string, j’utilise un std: : getline(). L’application permet de manager des cours et les informations des étudiants. Il y a différentes fonctionnalités et chacune d’entre elles récupère soit un integer entré par l’utilisateur dans la console soit un string ou les 2.
Je voudrais savoir comment récupérer la donnée entrée dans la console de manière propre et peu importe l’ordre.
Quelques exemples de problèmes que j’ai rencontrés
- Récupérer un integer avant un string : l’instruction pour récupérer le string n’est pas exécutée. Pour pallier à cela, j’ai utilisé le std::cin.ignore() avant le std::getline() pour récupérer le string. Mais cela a conduit au problème suivant.
- Récupérer 2 strings l’un après l’autre avec un std::cin.ignore() entre les 2. Le code qui suit est un exemple du cas présent et selon la position du std::cin.ignore() et les arguments, le résultat n’est pas satisfaisant.
std::string str{};
std::string str2{};
/*bout de code exécuté par une fonction x*/
std::cout << "entrez str:" << std::endl;
std::getline(std::cin, str);
std::cout << "str = " << str << std::endl;
/*bout de code exécuté par une fonction y appelée directement après l'exécution de la fonction x*/
std::cin.ignore(); // pour pallier le premier problème si la fonction x récupère un integer
//std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "entrer str2:" << std::endl;
//std::cin.ignore();
//std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::getline(std::cin, str2);
std::cout <<"str2 = " << str2 << std::endl;
Merci d’avance pour vos retours