Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de getline

    2 septembre 2007 à 14:57:53

    Bonjour à tous.
    Je rencontre un problème avec l'utilisation du getline.

    Voici mon programme (uniquement les parties intéressantes) :
    1. #include <iostream>
    2. using namespace std;
    3. const int NE_MAX=20;
    4. const int MAX=30;
    5. struct element{
    6.         char nom[MAX];
    7.         char code;
    8. };
    9. void saisie (element t[], int &NE){
    10.         int i,j;
    11.         do{
    12.                 cout<<"\nEntrez le nombre d'etudiants : "<<endl;
    13.                 cin>>NE;
    14.         }while(NE<1||NE>NE_MAX);
    15.         for(i=0; i<NE; i++){
    16.                 cout<<"\nEntrer le nom de l'etudiant "<<i+1<<" : ";
    17.                 cin>>t[i].nom;
    18.                 cin.getline(t[i].nom,MAX);
    19.                 cout<<"\nEntrer son code : ";
    20.                 cin>>t[i].code;
    21.                 }
    22.         }
    23. }
    24. void affiche (element t[], int NE){
    25.         int i,j;
    26.         cout<<"\nLe tableau est le suivant : "<<endl;
    27.         for(i=0;i<NE;i++){
    28.                 cout<<"Nom "<<i+1<<" : "<<t[i].nom<<endl;
    29.                 cout<<"Code : "<<t[i].code<<endl;
    30.                 }
    31.         }
    32. }
    33. void main(){
    34.         element t[NE_MAX];
    35.         int choix=0;
    36.         int NE;
    37.         int a=0;
    38.         saisie(t,NE);
    39.         affiche(t,NE);
    40. }


    Le problème est que si je tape un nom composé, comme "Jean Jacques", il ne m'affiche que " Jacques".

    En vous remerciant d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      2 septembre 2007 à 16:06:13

      Salut,
      Tu confondrai pas cin.getline avec cin.get par hazard. Enfin en tout cas si tu veux tronquer ta chain utilise cin.get, je sais qu'il marche bien.
      ps: je te conseil de vider le tampon a chaque tour de ta boucle en faisant:

      1. cin.ignore(numeric_limits<streamsize>::max(), '\n')


      ps2: j'espère que j'suis pas hors sujet la :p.
      • Partager sur Facebook
      • Partager sur Twitter
        2 septembre 2007 à 17:25:39

        Entre chaque utilisation de >>, et de getline, il faut purger le caractère '\n' de cin.

        PS: quitte à faire du C++, préfère std::getine.
        • 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.

        Problème de getline

        × 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.
        • Editeur
        • Markdown