gpt4 book ai didi

c++ - 为什么数据没有被正确地写入/读取到这个文件中?

转载 作者:行者123 更新时间:2023-11-30 03:17:02 25 4
gpt4 key购买 nike

下面的代码只是从对象中接受用户的一些数据,并将其写入二进制文件。第一个对象写得很好,但之后就乱七八糟了。

下面是将第一个对象写入文件后读取文件的输出。

ROLL NO.      NAME          MARKS
234 Sansa 67

一切都很好,正如我所料。但是当我在文件中追加另一个对象时,就会发生这种情况。

ROLL NO.      NAME          MARKS
234 SansSnow 78
564 Jon Snow 78

卷号保持不变,但先前对象的名称与最后一个对象的名称混淆,并且它们的标记被最后一个对象的标记覆盖。为什么会这样?

代码:

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

fstream file;

class Student
{
protected:
int rollno;
char name[30];
float marks;
public:
void getData()
{
cout<<"ENTER THE DATA..."<<endl<<endl;
cout<<"Roll Number : ";
cin>>rollno;
fflush(stdin);
cout<<"Name : ";
cin.getline(name,30);
cout<<"Marks : ";
cin>>marks;
}
void displayData()
{
cout<<"\n"<<rollno;
cout<<setw(17)<<name;
cout<<setw(13)<<marks;
}
void writeData()
{
file.open("StudentData.dat", ios::app|ios::binary);
file.write((char*)this, sizeof(this));
file.close();
}
void readData()
{
file.open("StudentData.dat",ios::in|ios::binary);
while(file.read((char*)this, sizeof(this)))
{
displayData();
}
file.close();
}
};

Student S1;

int main()
{
cout<<"\nMAIN MENU"<<endl<<endl;
cout<<"1. Enter data and write to file\n";
cout<<"2. Read data from file and display\n";
cout<<"3. Exit\n\n";
cout<<"Enter your choice : ";
int choice;
cin>>choice;

switch(choice)
{
case 1:{
S1.getData();
S1.writeData();
cout<<endl<<endl;
cout<<"Data written to file successfully!"<<endl;
main();
break;
}
case 2:{
cout<<"ROLL NO."<<setw(10)<<"NAME"<<setw(15)<<"MARKS";
S1.readData();
cout<<endl;
main();
break;
}
case 3:{
exitop:
char confirmExit;
cout<<"\nAre you sure you want to exit? (Y/N) : ";
cin>>confirmExit;
if(confirmExit=='y' or confirmExit=='Y')
exit(0);
else if(confirmExit=='n' or confirmExit=='N')
{
cout<<"Exit Aborted.\n\n";
getchar();
main();
}
else{
cout<<"Invalid Input!";
goto exitop;

}
}
default:{
cout<<"Invalid Input!";
break;
}
}
return 0;
}

最佳答案

你只读写了 8 个字节。 this 是一个指针,所以 sizeof(this) 是 8(在 64 位机器上)。您实际上想要做的是获取对象的大小,因此请使用 sizeof(*this)sizeof(Student)

关于c++ - 为什么数据没有被正确地写入/读取到这个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55773953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com