web-dev-qa-db-fra.com

C ++: Utilisation d'ifstream avec getline ();

Consultez ce programme

ifstream filein("Hey.txt");
filein.getline(line,99);
cout<<line<<endl;
filein.getline(line,99);
cout<<line<<endl;
filein.close();

Le fichier Hey.txt contient beaucoup de caractères. Plus d'un millier

Mais ma question est pourquoi dans la deuxième fois j'essaie d'imprimer la ligne. Il n'est pas imprimé?

8
Mohamed Ahmed Nabil

Selon la référence C++ ( ici ) getline définit le ios::fail Lorsque le nombre de caractères 1 a été extrait. Vous devez appeler filein.clear(); entre les appels getline().

11
Roman Kutlak

La façon idiomatique de lire les lignes d'un flux est donc:

{
    std::ifstream filein("Hey.txt");

    for (std::string line; std::getline(filein, line); )
    {
        std::cout << line << std::endl;
    }
}

Remarque:

  • Non close(). C++ s'occupe de la gestion des ressources pour vous lorsqu'il est utilisé de manière idiomatique.

  • Utilisez le std::getline Gratuit, pas la fonction membre du flux.

38
Kerrek SB

Comme Kerrek SB l'a dit correctement, il y a 2 possibilités: 1) La deuxième ligne est une ligne vide 2) il n'y a pas de deuxième ligne et tous les 1000 caractères sont sur une seule ligne, donc le deuxième getline n'a rien à obtenir.

1
BigBoss