Question

J'ai cette fonction pour lire tous les contenus du fichier. Le problème, c'est que lorsque je lis des lettres, je déclenche une nouvelle ligne et je cherche toujours par 1 et non jusqu'à la fin de la ligne. Comment puis-je mieux écrire cette fonction?

int v;
    while (!in.eof())
    {
        while (in >> v)
            cout << v << " ";

        cout << endl;
        if (in.eof())
            break;
        in.clear();
        in.seekg(1, ios::cur);
        int a;
        a=0;
    }
Était-ce utile?

La solution

Si votre fichier se compose uniquement d'intes séparées par des lignes nouvelles (espaces compris), cela devrait alors suffire.

while( in >> v )
{
    // do something with v
}

Après le fichier, si in.fail () est false et in.eof () est true, vous avez atteint la fin du fichier sans erreur de formatage. Sinon, une erreur s'est produite lors de la lecture d'un int.

Si vous recevez des entrées non valides et souhaitez récupérer vos données, vous devez déterminer comment vous souhaitez les récupérer. Si vous voulez ignorer la fin de la ligne et recommencer l'analyse, vous pouvez utiliser quelque chose comme ceci.

in.clear();
in.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

Autres conseils

Premier problème, le code ci-dessus ne s’arrête pas à la fin de la ligne.
L’opérateur > > () ignore les & amp;; caractères d’espace blanc ". qui inclut le caractère de nouvelle ligne.

Comment cela peut-il être mieux écrit?
C'est difficile à dire sans savoir ce que vous essayez de faire avec les nombres et quel est le format d'entrée du fichier!

Mais si j'écrivais ceci, je l'écrirais sans utiliser ces lignes:

    if (in.eof())
            break;
    in.clear();
    in.seekg(1, ios::cur);

Lors du traitement d'un fichier texte au format, l'utilisation de seek () est rare.

Assumign:
   Le fichier ne contient que des chiffres.
   Vous voulez lire tous les numéros dans un conteneur.

std::vector<int>    data;

std::copy(  std::istream_iterator<int>(in),  // An iterator from current point
            std::istream_iterator<int>(),    // To end of file.
            std::inserter(data)              // Destination (insert into data)
         );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top