Problème avec getline [Résolu]

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- - Dernière réponse : cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- 1 oct. 2010 à 09:59
bonjour,
j'ai un petit problème avec getline:

j'ai en entrée 2 textes : text comporte 3 lignes et text1 comporte 2 lignes, je veux avoir en résultat:
test
test
test
test
test
test

j'ai écrit ce code:

 #include <string>
#include <fstream>
#include 
#include <stdlib>

int main()
{ std::string ligne;
  std::string ligne1;
  std::ifstream in ("text.txt");
  std::ifstream in1 ("text1.txt");
  while (std::getline (in , ligne)
      while (std::getline (in1, ligne1)
           std::cout << "test" << std::endl;
  system("pause");
  return 0;
 }

normalement j'aurai le mot test 6 fois (nombre de ligne de text * nombre de ligne de text1)
alors que le code ci-dessus me donne seulement 2 fois (le nombre de lignes de text1)

est ce que c'est normal ce que j'ai eu comme résultat, et pourrais-je faire autrement pour avoir le résultat voulu.
j'espère bien avoir votre aide.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
94
Date d'inscription
jeudi 23 novembre 2000
Statut
Membre
Dernière intervention
1 juin 2013
3
Merci
Salut les Garcs

  while (std::getline (in , ligne))
  {
    std::cout << ligne << std::endl;
    while (std::getline (in1, ligne1))
      std::cout << ligne1 << std::endl;
  }

Je ne Pense pas que mervat veux faire cela !!!




  while (std::getline (in , ligne)
      while (std::getline (in1, ligne1)
           std::cout << "test" << std::endl;



Tu veux afficher :
cout << "test"
c'est bien ca ?


Il me semble, lorsque ta deuxieme ligne
while (std::getline (in1, ligne1)
fini sa boucle.
Le programme s'arrête, et ce pour une raison simple.
Le flux est terminer !!!!
Lorsque la 1er boucle repart à la charge, la deuxieme boucle sort tout de suite


Essaye donc :

  while (std::getline (in , ligne)
  {
      while (std::getline (in1, ligne1)
           std::cout << "test" << std::endl;
      in1.clear();
   }




clear();
à pour but, de réinitialiser les Flags d'erreur du flux:
Ainsi en attaquant une deuxième, puis une troisième fois ton flux, il ne sera plus considérer comme EOF.
Et ton flux sear relut.



PS:
Il faut certainement également faire un in1.seek(0)

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de shorzy
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
0
Merci
Tu ne l'affiche pas, tout simplement !

J'ai juste ajouté un std::cout :)

#include <fstream>
#include 

int main()
{
  std::string ligne;
  std::string ligne1;
  std::ifstream in("text.txt");
  std::ifstream in1("text1.txt");
  while (std::getline (in , ligne))
  {
    std::cout << ligne << std::endl;
    while (std::getline (in1, ligne1))
      std::cout << ligne1 << std::endl;
  }

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
0
Merci
bonjour,
merci bien pour votre aide et vos réponses rapides,
ce que j'ai voulu exactement c'est d'afficher le mot "test" n fois (n étant le nombre de lignes de text * le nombre de lignes de text1) et pas le contenu des lignes,

j'ai essayé alors ce que shorzy m'a proposé et ca m'a donné le résultat voulu: (sauf que au lieu de seek c'est seekg)
#include <string>
#include <fstream>
#include 
#include <stdlib>

int main()
{ std::string ligne;
  std::string ligne1;
  std::ifstream in ("text.txt");
  std::ifstream in1 ("text1.txt");
  while (std::getline (in , ligne))
      { in1.seekg(0);
        while (std::getline (in1, ligne1))
            std::cout << "test" << std::endl;
        in1.clear;
      }
  system("pause");
  return 0;
 }
Commenter la réponse de cs_mervat