Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao việc sử dụng iostream ::eof trong một điều kiện vòng lặp được coi là sai?


Chỉ vì chúng tôi chưa đạt EOF, không có nghĩa là lần đọc tiếp theo sẽ thành công.

Hãy xem xét bạn có một tệp mà bạn đọc bằng cách sử dụng các luồng tệp trong C ++. Khi viết một vòng lặp để đọc tệp, nếu bạn đang kiểm tra stream.eof (), về cơ bản bạn đang kiểm tra xem tệp đã đạt đến eof chưa.

Vì vậy, bạn sẽ viết mã như -

Ví dụ

#include<iostream>
#include<fstream>
using namespace std;

int main() {
   ifstream myFile("myfile.txt");
   string x;
   
   while(!myFile.eof()) {
      myFile >> x;
      // Need to check again if x is valid or eof
      if(x) {
         // Do something with x
      }
   }
}

Ví dụ

Mặc dù khi bạn sử dụng luồng trực tiếp trong một vòng lặp, bạn sẽ không phải kiểm tra điều kiện hai lần -

#include<iostream>
#include<fstream>
using namespace std;

int main() {
   ifstream myFile("myfile.txt");
   string x;
   while(myFile >> x) {
      // Do something with x
      // No checks needed!
   }
}