ifstream, la fin de la ligne et de passer à la prochaine ligne?
comment puis-je détecter et de passer à la ligne suivante en utilisant std::ifstream?
void readData(ifstream& in)
{
string sz;
getline(in, sz);
cout << sz <<endl;
int v;
for(int i=0; in.good(); i++)
{
in >> v;
if (in.good())
cout << v << " ";
}
in.seekg(0, ios::beg);
sz.clear();
getline(in, sz);
cout << sz <<endl; //no longer reads
}
Je sais me dire si une erreur s'est passé, mais le flux ne fonctionne plus une fois que cela arrive. Comment puis-je vérifier pour voir si je suis à la fin de la ligne avant de lire un autre int?
OriginalL'auteur | 2009-01-25
Vous devez vous connecter pour publier un commentaire.
Utilisation ignore() de tout ignorer jusqu'à ce que la ligne suivante:
Si vous devez le faire manuellement, il suffit de cocher othe personnage pour voir si c'est '\n'
C'est probablement à défaut parce que vous faites une recherche avant d'effacer le mauvais bits.
OriginalL'auteur Martin York
Vous devez effacer le message d'erreur état de flux avec
in.clear();
après la boucle, puis le flux de travail encore, comme si aucune erreur ne s'est passé.Vous pouvez également simplifier votre boucle:
Le flux d'extraction de revenus si l'opération a réussi, de sorte que vous pouvez le tester directement, sans explicitement la vérification de
in.good();
.Intéressant Charles!
L'implicite
operator void*
appelsfail
, doncwhile (in >> v)
réussira si l'extraction de réussir, peu importe si EOF état.oui, je sais, c'est ce qui fait la boucle while travail "tel que prévu'. Je viens de commenter parce que qqch par rapport explicitement de contrôle.bonne (de) "avec l'aide de la" tandis que, >>v)' idiome et je voulais noter qu'ils ne sont pas équivalentes.
OriginalL'auteur sth