Je débute, comme beaucoup en c++, donc pardon d'avance, mais j'ai besoin de précision à propos de l'utilisation de cin.
J'ai pris pour habitude de chercher des exercices à droite à gauche pour m'exercer en fonction de mon niveau. En l’occurrence, je m'entraine à récupérer des entrées claviers et les stocker dans différentes variables.
Je remarque que souvent, dans les solutions, je trouve :
cin.ignore();
cin.get();
Jusqu'ici, j'ai cru comprendre, qu'on utilisait cin.ignore() après un cin quand on voulait utiliser un getline().
Mais dans le cas de tous ces exercices très simples ( du type entrer la longueur, la largeur et pouf, je calcule le périmètre ), je ne vois pas du tout pourquoi ajouter ces lignes citées ci-dessus à la fin.
Maintenant je ne suis pas sur de bien comprendre ta question. Tu veux dire que tu vois ces deux instructions en fin de programme? Si c'est le cas, c'est tout sauf propre. Bien au contraire c'est quelque chose qu'il ne faut jamais mettre dans des vrais programmes, car une fois exécuter en console le programme fera toujours une pause, ce qui ne rime à rien. Ce n'est qu'un contournement dégueulasse pour palier à la mauvaise utilisation d'un IDE, ou à l'utilisation d'un IDE mal foutu: pour empêcher que la console d'exécution se referme toute seule. Je ne peux que conseiller de lire la doc de l'IDE ou d'en changer à la place.
std::cin et l'équivalent C scanf sont faits pour lire des entrées correctement formattées (cas d'utilisation : pipelines entre processus UNIX). Ainsi, si tu souhaites obtenir un entier alors que l'utilisateur met une entrée à la ligne, une chaines de caractères non convertible il ne se passe rien et l'entrée utilisateur reste. C'est pour ça que std::cin/scanf ne doivent pas être utilisés pour lire l'entrée utilisateur.
Il faut utiliser std::getline et analyser les lignes utilisateur à la place, en faisant les conversions qui vont bien : std::stod et autres amis.
- Edité par markand 19 janvier 2021 à 14:32:17
git is great because Linus did it, mercurial is better because he didn't.
std::cin >> d, c'est très bien pour extraire simplement des nombres et demander à l'utilisateur de recommencer si ce n'en n'est pas un. PAr contre, il faudrait toujours tester une extraction sur un flux. Meme un getline.
Maintenant quand on va processer des fichiers avec des formats un peu plus complexes, effectivement on va employer d'autres approches où le fichier sera entièrement chargé en mémoire et on va employer des parser dédiés. Mais c'est un autre sujet pour moi.
Sujet encore très différent de la mauvaise pratique qui consiste à rajouter une pause artificielle pour palier à la mauvaise utilisation de son outil de développement.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.