![](/img/trans.png)
[英]Vector data written to binary file isn't the same when read back into another vector, why?
[英]Why is the data not getting properly written/read in this file?
以下代碼只接受對象中來自用戶的某些數據,並將其寫入二進制文件中。 第一個對象寫的很好,但是之后就弄亂了。
下面是將第一個對象寫入文件后讀取文件的輸出。
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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.