Lỗi đọc dữ liệu từ file trong C++

Em đang làm bài tập về Struct trong C++
Em có đoạn code sau

#include <bits/stdc++.h>
using namespace std;
ifstream fi ("4-47.INP.c");

struct Phieu
{
    string name;
    string gioitinh;
    int chieucao;
    int cannang;
};

void Nhapphieu(Phieu &suckhoe)
{
    //fflush(stdin);
    getline(fi,suckhoe.name,'\n');
    fi >> suckhoe.gioitinh;
    fi >> suckhoe.chieucao;
    fi >> suckhoe.cannang;
}

void Nhapstruct (Phieu suckhoe[], int n)
{
    for(int i=0; i<n; i++)
    {
       Nhapphieu(suckhoe[i]);
    }
}

void Xuatphieu(Phieu suckhoe)
{
    cout << suckhoe.name << endl;
    cout << suckhoe.gioitinh << endl;
    cout << suckhoe.chieucao << endl;
    cout << suckhoe.cannang << endl;
}

void Xuatstruct (Phieu suckhoe[], int n)
{
    for(int i=0; i<n; i++)
    {
       Xuatphieu(suckhoe[i]);
    }
}

int main()
{
    string nameclass;
    fi >> nameclass;
    int n;
    fi >> n;
    cout << nameclass << endl;
    cout << n << endl;
    Phieu suckhoe[n];
    Nhapstruct(suckhoe,n);
    Xuatstruct(suckhoe,n);

    return 0;
}

Trong đó, cái đoạn:

getline(fi,suckhoe.name,'\n');
fi >> suckhoe.gioitinh;
fi >> suckhoe.chieucao;
fi >> suckhoe.cannang;

Nếu em dùng fi thì khi xuất ra nó ra linh tinh hết lên. Nếu dùng cin thì nó chạy ổn ạ. Mọi người giải thích giúp em với ạ.

Dữ liệu vào của em:

Myclass 6
Nguyen_Van_A
Nam
165
50
Nguyen_Van_B
Nu
163
51
Nguyen_Van_C
Nam
171
59
Nguyen_Van_D
Nu
169
57
Nguyen_Van_E
Nam
170
60
Nguyen_Van_F
Nu
166
52

Mọi người giúp em với ạ

Do bạn đọc N
Mà lúc này N đằng sau nó là còn \r\n hoặc \n nữa. Đọc thêm cái mớ dư thừa đó đi là hết.

Fix nhanh

    string a;
    getline(fi, a, '\n');
    Nhapstruct(suckhoe, n);
...

Bạn cũng cần flush các dấu xuống hàng khi đọc xong chữ số cuối cùng trong dãy danh sách sức khoẻ nữa. :thinking: Mình không rành C++ nên không biêt có cách nào tiện hơn không.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?