title: getline() skipping first line of text file (C++)
body: <p>I'm trying to read information from a text file with C++. Although, my program keeps on skipping the first line of the text file whenever I try to read it with an <em>ifstream</em>. Here is my code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;fstream&gt;
  #include &lt;iomanip&gt;
  #include &lt;list&gt;
  
  using namespace std;
  #include "Fichiers.h"
  
  
  void Fichiers::OuvrirFichierLecture()
  {
  
      int compteChamps = 1;
      int compteurValeurs = 0;        
  
  
      try {
          ifFichier.open(nomFichier, ios::in);
  
          if (!ifFichier)
          {
              throw("Erreur 01: Fichier \"" + nomFichier + "\" introuvable.");
          }
      }
      catch (string&amp; messageErreur)
      {
          cout &lt;&lt; messageErreur &lt;&lt; endl &lt;&lt;
          "Un redémarrage du programme est nécessaire. Veuillez vérifier que tous les" &lt;&lt; endl &lt;&lt;
          "fichiers texte se retrouvent dans le dossier du programme avant de relancer." &lt;&lt; endl;
      }
  
  
      ifFichier.clear();
      ifFichier.seekg(0, ios::beg);
  
  
      if (ifFichier)      
      {
          string ligne;
          int compteurLigne = 0;
  
          while (getline(ifFichier, ligne))
          {
  
              if(nomFichier == "utilisations.txt"     
              {
  
                  int NAS, chambre;
                  string codePS, etablissement, date, dateFin;
  
                  string ligneActuelle = ligne;       // temporary cariable
  
  
                  // How many ;s are there in the actual line
                  for (int i = 0; i &lt; ligneActuelle.length(); i++)
                  {
                      if (ligneActuelle[i] == ';')
                      {
                          compteChamps++;
                      }
                  }
  
  
                  // Then, according to the number of ;s, the information will be stocked differently
                  string statut;
  
                  if (compteChamps == 4)
                      statut = "Rendez-vous";
                  else if (compteChamps == 6)
                      statut = "Hospitalisation";
  
  
                  // Reading &amp; saving information
                  if (statut == "Rendez-vous")
                  {
                      ifFichier &gt;&gt; NAS;
                      ifFichier.ignore(1, ';');
  
                      getline(ifFichier, codePS, ';');
  
                      getline(ifFichier, etablissement, ';');
  
                      getline(ifFichier, date);
  
  
  
                      // Insertion of the values in an array
                      TableauValeurs[compteurValeurs] = to_string(NAS);
                      TableauValeurs[compteurValeurs + 1] = codePS;
                      TableauValeurs[compteurValeurs + 2] = etablissement;
                      TableauValeurs[compteurValeurs + 3] = date;
  
                      compteurValeurs += 4;       // 4 values inserted
                  }
                  else if (statut == "Hospitalisation")
                  {
  
                      ifFichier &gt;&gt; NAS;
                      ifFichier.ignore(1, ';');
  
                      getline(ifFichier, codePS, ';');
  
                      getline(ifFichier, etablissement, ';');
  
                      getline(ifFichier, date, ';');
  
                      getline(ifFichier, dateFin, ';');
  
                      ifFichier &gt;&gt; chambre;
                      ifFichier.ignore(1, '\n');
  
  
  
                      TableauValeurs[compteurValeurs] = to_string(NAS);
                      TableauValeurs[compteurValeurs + 1] = codePS;
                      TableauValeurs[compteurValeurs + 2] = etablissement;
                      TableauValeurs[compteurValeurs + 3] = date;
                      TableauValeurs[compteurValeurs + 4] = dateFin;
                      TableauValeurs[compteurValeurs + 5] = to_string(chambre);               
  
                      compteurValeurs += 6;       // 6 values inserted 
  
                  }
  
                  compteChamps = 1;
              }
  
              compteurLigne++;
          }
  
      }
  
      nbValeurs += compteurValeurs;
  
  }
  </code></pre>
  
  <p>The problem is: although "ligneActuelle" correctly reads the first line of my text file and takes its value, <em>ifFichier >> NAS</em>, for example, will read the information of the next line. </p>
  
  <p>I also verified if some <em>cin.ignore()</em> were missing and it is not the case.</p>
  
  <p>Here is a sample of the text file I'm trying to read (utilisations.txt):</p>
  
  <pre><code>6360;NC-108;CH de saint-jérôme;2004-05-30;2004-08-02;342
  6361;N-123;CHSLD du Nord;2006-04-18
  6361;NC-108;CLSC de l'Est;2008-03-20
  1600;OB-331;CH de saint-jérôme;2003-06-30;2003-08-07;1608
  1600;MG-132;CH Hotel-Dieu;2010-05-31
  </code></pre>
  
  <p>For example, at the beginning of the code, <em>ligneActuelle</em> equals "<em>6360;NC-108;CH de saint-jérôme;2004-05-30;2004-08-02;342</em>", but <em>ifFichier >> NAS;</em> will read <em>6361</em>.</p>
  
  <p>Thank you for the help!</p>
  
  <p>Gabriel</p>