30/09/2018, 19:02

Lỗi đọc ghi file nhị phân trong c++?

e có 1 chương trình nhỏ sau
cho lớp người(ho ten, dia chi, sdt)
lớp sinh vien ké thừa từ lớp người và có thêm(mã sv, lớp)
viết ct nhập danh sách sinh viên ghi vào file và đọc ra in ra màn hình
e làm bị lỗi,
tại sao file nhập xong, tắt chương trình,để nguyên file .dạt (file nhin phân sinh ra khi chạy) mở lại chương trình thì nhập bị lỗi
mặc dù chế độ mở file e đã thử đọc và ghi cùng lúc
và chương trình chạy xong có báo 1 lỗi e k rõ
các anh(chị) xem giúp e với ạ

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

class Nguoi{
	protected:
		string hoten, diachi, sdt;
	
};
int MASV = -1;
class Sinhvien:public Nguoi{
	protected:
		int masv;
		string lop;
		
	public:
		void input(){
		masv = ++MASV;
		cout<<"Nhap ten sv  ";	 	fflush(stdin);  	getline(cin, hoten);
		cout<<"Nhap dia chi sv  ";	fflush(stdin);		getline(cin, diachi);
		cout<<"Nhap sdt sv  ";		fflush(stdin);		getline(cin, sdt);
		cout<<"Nhap lop sv  ";		fflush(stdin);		getline(cin, lop);
		}
		
		void writefile(){
			ofstream f;
			f.open("SV.DAT", ios::out | ios::app | ios::binary);
			if (f.is_open()){
				f.write ((char *) &masv , 	sizeof (masv));
				f.write ((char *) &hoten ,	sizeof (hoten));
				f.write ((char *) &diachi , sizeof (diachi));
				f.write ((char *) &sdt , 	sizeof (sdt));
				f.write ((char *) &lop , 	sizeof (lop));		
				f.close();
			}
			else {
				cout<<"Loi mo file"<<endl;
				exit(0);
			}
		}	
		
		void readfile(){
			ifstream f;
			cout<<"Danh sach sv da nhap"<<endl;
			f.open("SV.DAT", ios::in| ios::binary);
			if (f.is_open()){
				while (  ! f.eof()   ){  
				f.read ((char *) &masv , sizeof (masv));
				f.read ( ( char* )&hoten , 	sizeof (hoten));
				f.read ((char *) &diachi , 	sizeof (diachi));
				f.read ((char *) &sdt , 	sizeof (sdt));
				f.read ((char *) &lop , 	sizeof (lop));
				if (f.eof()  ) break;
				output();
				}
			f.close();
			}
			else {
				cout<<"Loi mo file"<<endl;
				exit(0);
			}
			}	
			
		void output(){
		cout<<masv<<"	"<<hoten <<"	"<<diachi<<"	"<<sdt<<"	"<<lop<<endl;	
		}	
};

main(){
	cout<<"Ban muon nhap thong tin cho bao nhieu sv"<<endl;
	int sosv;
	cin>>sosv;
	Sinhvien sv[sosv];
	Sinhvien temp;
	for (int i = 0 ; i < sosv ; i++){
		sv[i].input();
		sv[i].writefile();
	}
	temp.readfile();
	
	system("pause");
	return 0;
}
Bài liên quan
0