01/10/2018, 16:09
Hỏi về cách đọc dữ liệu từ file
E đang làm bài tập load dữ liêu từ file nhưng không hiểu sao vòng while trong hàm của e viết lại là vòng lặp vô tận ạ. Dù e đã cho điều kiện đọc đến cuối file thì dừng : while (file_data.eof()==false)
Node * nhap_nhan_vien(Node * &head)
{
ifstream File_data;
File_data.open("C:\Users\Huu Thanh\Desktop\data.txt",ios_base::in);
while(File_data.eof()==false)
{
Node *k=new Node;
getline(File_data,k->data.name);
File_data>>k->data.age;
File_data>>k->data.he_so_luong;
File_data>>k->data.phu_cap;
if(head==NULL) head=k;
else
{
k->nextNode=head;
head=k;
}
}
File_data.close();
return head;
}
và khi e thêm dòng lệnh File_data.get(); vào sau đoạn đọc dữ liệu thì hàm lại chạy bình thường. mn cho e hỏi chức năng lệnh File_data.get() là gì và nó hoạt động như thế nào đươc không ạ được không ạ
Node * nhap_nhan_vien(Node * &head)
{
ifstream File_data;
File_data.open("C:\Users\Huu Thanh\Desktop\data.txt",ios_base::in);
while(File_data.eof()==false)
{
Node *k=new Node;
getline(File_data,k->data.name);
File_data>>k->data.age;
File_data>>k->data.he_so_luong;
File_data>>k->data.phu_cap;
File_data.get();
if(head==NULL) head=k;
else
{
k->nextNode=head;
head=k;
}
}
File_data.close();
return head;
}
Bài liên quan
http://en.cppreference.com/w/cpp/io/basic_istream/get
Nếu bạn không File_data.get() thì sau khi đọc xong một dòng, con trỏ file không đọc tiếp dòng tiếp theo, làm thế nào để đạt được File_data.eof()? Bạn cứ hình dung vầy dễ hiểu: mới đầu vô đọc file giống như bạn cầm cây bút rà dòng đầu tiên, bạn đọc lên cho người khác nghe để họ chép lại hoặc họ kiểm tra gì đó. Xong, bạn rà cây bút sang dòng tiếp theo cho đến hết cái danh sách thì thôi, việc rà bút sang dòng khác chính là File_data.get(), nếu không, thì bạn đọc xong dòng đầu và đứng im đó, mà lại hỏi xem đã cuối danh sách chưa?
Dễ hình dung hơn, bạn từng dùng vòng lặp while, thì bạn hay có i = i + 1 hay i++ là mục đích để nó thay đổi điều kiện, ở bài này cũng thế, bạn phải có File_data.get() để giúp thay đổi điều kiện, không thì điều kiện không bao giờ thay đổi, và File_data.eof() nó cứ false hoài vô tận là không có gì lạ.
vậy cái File_data.get() là giúp đẩy con trỏ chuột xuống dòng tiếp theo ạ?
Mục đích ở đây là vậy.
Đúng rồi. Đọc lần lượt hết dòng này đến dòng khác sau mỗi vòng lặp while.