簡體   English   中英

為什么數據沒有正確寫入/讀取此文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM