Đọc & Ghi obj vào binary file c++

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

class Person {
private:
    int stt;
    string name;
    int age;

public:
    void nhap();
    void xuat();
};

void Person::nhap() {
    cout << "Enter your numerical number : ";
    cin >> stt;
    cin.ignore();
    cout << "Enter your name : ";
    getline(cin, name);
    cout << "Enter your age : ";
    cin >> age;
}

void Person::xuat() {
    cout << stt << endl;
    cout << name << endl;
    cout << age << endl;
    cout << "*************************" << endl;
}

class Management {
private:
    int n;
    Person* p;

public:
    void nhapn();
    void nhap2();
    void xuat2();
    void writef();
    void readf();
};

void Management::nhapn() {
    cout << "Enter the number of staff = ";
    cin >> n;
}
void Management::nhap2() {
    p = new Person[n];
    for (int i = 0; i < n; i++) {
        p[i].nhap();
    }
}
void Management::xuat2() {
    for (int j = 0; j < n; j++) {
        p[j].xuat();
    }
}

void Management::writef() {
    fstream ifs("dvc.txt", ios::out | ios::binary);
    for (int i = 0; i < n; i++) {
        ifs.write(reinterpret_cast<char*>(p + i), sizeof(Person));
    }
    ifs.close();
}

void Management::readf() {
    fstream ofs("dvc.txt", ios::in | ios::binary);
    for (int j = 0; j < n; j++) {
        ofs.read(reinterpret_cast<char*>(p + j), sizeof(Person));
    }
    ofs.close();
}


int main() {
    Management m, n;

    m.nhapn();

    m.nhap2();
    m.writef();
    m.readf();
    m.xuat2();

    return 0;
}

Em bị lỗi không đọc dc từ file, mong các bác chỉ giáo :sweat_smile:

merged to #1 post by noname00

lỗi ở string name; trong Person đó em. Xài char name[100]; đi

string nó giống như 1 con trỏ char* chứ ko phải mảng ký tự, khi em viết string xuống file thì nó viết giá trị của con trỏ này xuống file chứ ko phải mảng ký tự mà con trỏ này trỏ tới

3 Likes

bạn này cách đây mấy ngày cũng gặp vấn đề tương tự em nè :V

4 Likes

Vẫn lỗi a ơi, e nghĩ phần ô nhớ (p+i) & (p+j) có vấn đề

lỗi thế nào em, chương trình chạy bị lỗi hay lúc biên dịch bị lỗi

p+i p+j đúng mà chắc ko phải chỗ này đâu :V

à nếu em viết

    n.readf(); // Management n
    n.xuat2();

thì lúc này biến n.n chứa giá trị rác nên lúc đọc vào chắc có vấn đề :V

3 Likes

merged and moved by noname00

#include<iostream>
#include<string>
#include<fstream>

using namespace std;

class Person{
	private:
		int stt;
		char name[50];
		int age;
	public:
		void nhap();
		void xuat();	
};

void Person::nhap(){
			cout<<"Enter your numerical number : "; cin>>stt;
			cin.ignore();
			cout<<"Enter your name : ";
			cin.getline(name,20);
			cout<<"Enter your age : "; cin>>age;
		}
		
void Person::xuat(){
			cout<<stt<<endl;
			cout<<name<<endl;
			cout<<age<<endl;
			cout<<"*************************"<<endl;
		}

class Management{
	private:
		int n;
		Person *p = new Person[50];
	public:
		void nhapn();
		void nhap2();
		void xuat2();
		void writef();
		void readf();
};

void Management::nhapn(){
			cout<<"Enter the number of staff = "; cin>>n;
			}
			
void Management::nhap2(){
				for(int i=0;i<n;i++){
					p[i].nhap();
				}
			}
void Management::xuat2(){
				for(int j=0;j<n;j++){
					p[j].xuat();
				}
			}
			
void Management::writef(){
	fstream ifs("dvc.txt",ios::out|ios::binary);
	for(int i=0;i<n;i++){
		ifs.write(reinterpret_cast<char*>(p+i),sizeof(Person));
	}
	ifs.close();
}

void Management::readf(){
	fstream ofs("dvc.txt",ios::in|ios::binary);
	for(int j=0;j<n;j++){
		ofs.read(reinterpret_cast<char*>(p+j),sizeof(Person));
	}
	ofs.close();
}
			

int main(){
	Management m;
	
	m.nhapn();
	
	//m.nhap2();
	//m.writef();
	m.readf();
	m.xuat2();
	
	return 0;
}

Sau 1 hồi thì root là do em cấp phát động bên ngoài private, e xin đính chính lại code cmt trên
Xin cảm ơn các bác đã tận tâm thông não e!

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