Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pourquoi std::cin.ignore() avec parametres ?

Sujet résolu
    5 mai 2022 à 8:53:08

    Salut,

    Dans mon code j'ai voulu lire une chaine de caractères(std::string) mais je n'arrivais meme pas a entrer une quelconque valeur, l'exécution "sautait" cette instruction (std::getline(std::cin, fn);) je fais des recherches puis c'était parceque je lisais d'autres variables avant avec std::cin et il est dit d'utiliser std::ignore(std::numeric_limits<std::streamsize>::max(), '\n') pour "vider", ignorer tous les precedents caractères entrés dans std::cin.

    Mais j'ai juste fait un std::cin.ignore(); et mon code marchait bien. Sans paramètre ignore() va retirer/ignorer le dernier caractère entré, qui est dans mon cas \n je penses et qui me posait probleme.

    Je veux savoir si il est préférable d'utiliser ignore() avec ces paramètres(numeric_limits ...) sachant que sans eux mon code fonctionne bien. Et pourquoi toujours demander de tout ignorer(Dans tous les sujets que j'ai lu c'etait avec les mêmes paramètres partout) alors que dans certains cas ignorer juste le dernier caractère(\n) qui dérange std::getline() semble résoudre le probleme ?

    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2022 à 10:57:43

      Avec le max, cela purge tous les résidus. Genre, si tu tapes "125 sehuehgz eghmuto", que tu extrais le nombre avec ">>", les streamsize::max() permettra d'ignorer tout dont le bruit après le nombre. J'ai mis des caractères, mais cela pourrait tout aussi bien être un ensemble d'espaces.

      Techniquement, un ">> std::ws" pourrait suffire. Cf https://cpp.developpez.com/faq/cpp/?page=Manipulation-de-la-console#Pourquoi-std-getline-ne-lit-il-rien-et-faut-il-l-executer-deux-fois-pour-que-la-ligne-soit-lue

      -
      Edité par lmghs 5 mai 2022 à 11:21:41

      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        5 mai 2022 à 11:54:55

        Merci, je me passe donc du ignore() et je fais simplement: 

        std::getline(std::cin >> std::ws, fn)

        Pareil, mais "meilleur".

        • Partager sur Facebook
        • Partager sur Twitter

        Pourquoi std::cin.ignore() avec parametres ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown