Problème avec getline

Résolu
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 30 sept. 2010 à 18:36
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.
A voir également:

3 réponses

shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
30 sept. 2010 à 20:34
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)

@++
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 sept. 2010 à 19:37
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
0
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,
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;
 }
0
Rejoignez-nous