if (!input_file.fail()) {
int value;
input_file >> value;
/* ... process value ... */
}
Następnie po przeczytaniu value
, nie masz pojęcia, czy w ogóle właściwie odczytać cokolwiek z powodzeniem lub nie. Wszystko, co wiesz, to to, że przed zrobiłeś odczyt, wszystko działało poprawnie. Jest całkiem możliwe, że nie udało się odczytać liczby całkowitej, ponieważ trafiłeś na koniec pliku lub dane w pliku nie były liczbą całkowitą.
Z drugiej strony, jeśli piszesz
int value;
input_file >> value;
if (!input_file.fail()) {
/* ... process value ... */
}
Wtedy spróbujesz zrobić odczytu. Jeśli się powiedzie, przetworzysz wartość, którą przeczytałeś. Jeśli nie, możesz wtedy zareagować na fakt, że ostatnia operacja się nie udała.
(Można być jeszcze ładniejsza niż ta.
int value;
if (input_file >> value) {
/* ... process value ... */
}
która łączy operacje odczytu i badań w jeden To znacznie jaśniejsze tutaj, że jesteś potwierdzający, że odczyt udało.)
Jeśli robisz czyta w pętli, bardzo czysty sposób, aby to zrobić jest
for (int value; input_file >> value;) {
/* ... process value ... */
}
to sprawia, że jasne, że pętla, gdy jesteś w stanie utrzymać wartości odczytu z pliku.
Mam nadzieję, że to pomoże!
Tak! To wszystko ma sens. A jeśli to się nie powiedzie, wyczyść plik, komunikat o błędzie itp.? Dziękujemy! – jewfro
@ jewfro- Tak, to brzmi dobrze! – templatetypedef
Skróty dla pętli if i loop działają, ponieważ operator '>>' zwraca odniesienie do strumienia, a operator 'bool' w strumieniu wywołuje' fail'. –