sau Mã C++ sử dụng một ifstream đối tượng để đọc các số nguyên từ một tập tin văn bản (trong đó có một số trên mỗi dòng) cho đến khi nó chạm EOF. Tại sao nó đọc số nguyên trên dòng cuối cùng hai lần? Làm thế nào để sửa lỗi này?Đọc từ file văn bản cho đến EOF lặp đi lặp lại dòng cuối cùng
Code:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream iFile("input.txt"); // input.txt has integers, one per line
while (!iFile.eof())
{
int x;
iFile >> x;
cerr << x << endl;
}
return 0;
}
INPUT.TXT:
10
20
30
Output:
10
20
30
30
Lưu ý: Tôi đã bỏ qua tất cả các mã kiểm tra lỗi để giữ đoạn mã nhỏ. Hành vi trên được nhìn thấy trên Windows (Visual C++), Cygwin (gcc) và Linux (gcc).
sử dụng 'while (iFile >> x)'. Điều này đọc số nguyên và trả về luồng. Khi một luồng được sử dụng làm giá trị bool, nó sẽ kiểm tra xem luồng có hợp lệ hay không. Các phương thức hợp lệ eof() và bad() đều sai. xem http://stackoverflow.com/questions/21647/c-reading-from-text-file-until-eof-repeats-last-line#21666 –
Cùng tinh thần như bình luận: thay vì 'while (true)', nó có vẻ tốt hơn để viết 'while (file.good())' – PHF
Nếu bạn không chắc chắn làm thế nào để đọc tập tin cho đến khi lỗi hoặc kết thúc của tập tin, đọc bài viết này (lời giải thích rất tốt đẹp) https://gehrcke.de/2011/06/đọc-tập tin-in-c-sử dụng-ifstream-giao dịch-chính xác-với-badbit-failbit-eofbit-and-perror/ – stviper