IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

récuperer \n avec cin


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 95
    Par défaut récuperer \n avec cin
    bonjour à tous, je suis le tuto c++ moderne, pour un exercice, l'utilisateur doit entrer une suite de nombre qui seront placés dans un tableau, je voudrais que l'utilisateur appuie sur entrée sans entrer de nombre pour signifier qu'il à fini. Je cherche donc un moyen de récuperer le '\n' avec std::cin.
    merci d'avance!

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 752
    Par défaut
    std::istream::peek retourne le caractère courant dans le buffer: https://en.cppreference.com/w/cpp/io/basic_istream/peek

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
     
    int main()
    {
      int n;
      while (std::cin.peek() != '\n' && (std::cin >> n)) {
        std::cout << n << "\n";
        // pour ignorer le saut de ligne après le nombre
        std::cin.get();
      }
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 95
    Par défaut
    ok merci par contre je pourrais pas plutot utiliser std::cin.ignore() pour ignorer le saut de ligne? ou alors si tu peux m'expliquer le principe de cin.get parce que j'ai essayé de chercher à droite à gauche et je comprends pas vraiment son fonctionnement.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 752
    Par défaut
    Tu peux utiliser ignore, mais cela veut aussi dire ignorer tout les caractères qui suivent dans la ligne. Si la ligne contient 1 2 3 4, alors 2, 3 et 4 seront ignoré, là ou get va simplement consommer l'espace après 1 et la boucle reprendre sur 2.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 95
    Par défaut
    j'ai essayé d'appliquer ta solution a mon code mais je dois pas m'y prendre comme il faut parce que ça échoue misérablement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    int main()
    {
     
        SetConsoleOutputCP(CP_UTF8);
     
     
     
        std::vector<int> tableauInt{};
        unsigned int nombreEntre{ 0 };
        bool continuer{ true };
     
     
     
        do
        {
            std::cout << "entrez un nombre et validez le avec entrée ou appuyez sur entrée pour valider les nombres entrés \n";
     
     
            if (std::cin.peek() == '\n' && !(std::cin >> nombreEntre)) //si on trouve '\n' et que nombreEntre ne reçoit rien, c'est que l'utilisateur a fini d'entrer ses nombres
            {
                std::cout << "ça marche\n"; 
                continuer = false;
            }
            else if (std::cin.fail()) // si l'utilisateur à entré une connerie
            {
                std::cout << "entrée incorrecte";
                std::cin.clear();
                std::cin.ignore(255, '\n');
            }
            else
                tableauInt.push_back(nombreEntre); // si l'utilisateur a entré un nombre, on l'ajoute au tableau
     
        } while (continuer);
     
        for (int element : tableauInt)
            std::cout << element << std::endl;
        */
    }
    j'ai essayé en ne mettant que std::cin.peek() == '\n' dans mon premier if mais du coup meme en entrant un nombre la condition etait validée.

    EDIT: du coup j'ai trouvé un autre moyen (j'ai repris ta boucle while et j'ai mis mon code dedans) mais j'aimerai bien savoir pourquoi ce code ne marche pas.
    merci!

Discussions similaires

  1. S'affranchir de l'écho avec cin
    Par Invité dans le forum SL & STL
    Réponses: 6
    Dernier message: 03/07/2006, 22h20
  2. Problème avec cin
    Par Azharis dans le forum SL & STL
    Réponses: 18
    Dernier message: 28/04/2005, 11h28
  3. probleme avec cin.ignore()
    Par Stany dans le forum SL & STL
    Réponses: 17
    Dernier message: 09/04/2005, 13h57
  4. probleme avec cin et wstring
    Par sorari dans le forum SL & STL
    Réponses: 11
    Dernier message: 08/04/2005, 10h33
  5. Le buffer clavier avec cin, et getch()
    Par Info420 dans le forum SL & STL
    Réponses: 1
    Dernier message: 06/12/2004, 12h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo