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;
}
rogp10 viết 18:21 ngày 01/10/2018

http://en.cppreference.com/w/cpp/io/basic_istream/get

Vô Thin viết 18:14 ngày 01/10/2018

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 ạ

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ạ.

Nguyễn Hữu Thanh viết 18:10 ngày 01/10/2018

vậy cái File_data.get() là giúp đẩy con trỏ chuột xuống dòng tiếp theo ạ?

rogp10 viết 18:16 ngày 01/10/2018

Mục đích ở đây là vậy.

Vô Thin viết 18:18 ngày 01/10/2018

Đú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.

Bài liên quan
0