je jouais avec itérateurs IStream et la gestion des exceptions, il y a quelques jours et je suis tombé sur cette curiousity:flux d'entrée itérateurs et les exceptions
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
if (argc < 2) {
cout << argv[0] << " <file>" << endl;
return -1;
}
try {
ifstream ifs(argv[1]);
ifs.exceptions(ios::failbit | ios::badbit);
istream_iterator<string> iss(ifs), iss_end;
copy(iss, iss_end, ostream_iterator<string>(cout, "\n"));
}
catch (const ios_base::failure& e) {
cerr << e.what() << endl;
return -2;
}
return 0;
}
Pourquoi une exception failbit est toujours élevé après avoir lu le dernier mot le fichier d'entrée?
Pourrait-on corriger le formatage, s'il vous plaît? –
Je n'ai jamais lu de fichier avec des itérateurs quand j'étais programmin en C++ mais en cycle de lecture standard j'avais une condition spéciale pour la fin du fichier (ie lire sans EOF) – Roman
@Roman: alors vous avez fait mal. Seul le test de EOF aboutira à une boucle infinie en cas d'erreur de lecture car la fin du fichier ne sera jamais atteinte. Il est recommandé de toujours tester ** both ** pour EOF et l'échec. D'autre part, le code OP utilise des exceptions, donc il est sûr. –