Отсутствие данных в файле dat после операции записи - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь сохранить данные, введенные пользователем в связанный список, а затем сохранить эти данные в файле, чтобы я мог получить их обратно, когда введу второй параметр (согласно int main ()).К сожалению, после того, как я записал данные в файл и проверил его обратно, я обнаружил, что мои данные отсутствуют, и файл заполнен мусором. Поэтому я не могу получить данные обратно.Есть ли решение этой проблемы ??Спасибо.

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

    using namespace std;

    fstream fp;

    class List{

    private:

    struct node{

    string name;
    string surname;
    int idNum;
    string nationality;
    int number;

    node *next;

    }nod;

    node* head;
    node* curr;
    node* temp;

    public:

    List();

    bool isEmpty(node *head){

        if(head==NULL){
            return true;
        }
        else
            return false;

    }

    void AddNode(string addName,string addsurName,int addId,string addNation,int addNumber);
    void insertAsFirst(string addName,string addsurName,int addId,string addNation,int addNum);
    //void DeleteNode(int delData);
    void printList();
    void write_linky(string name,string surName,int idNum,string nation,int number);
    void read_linky();


    }lb;

    List::List(){


    head=NULL;
    curr=NULL;
    temp=NULL;

    }

    void List::insertAsFirst(string addName,string addsurName,int addId, string addNation,int addNum){


    node *n = new node;
    n->name=addName;
    n->surname=addsurName;
    n->idNum=addId;
    n->nationality=addNation;
    n->number=addNum;

        n->next = NULL;

        head = n;
        //last = temp;
    }


    void List::AddNode(string addName,string addsurName,int addId,string addNation,int addNum){


    if(isEmpty(head)){

     insertAsFirst(addName,addsurName,addId,addNation,addNum);

    }
    else{
    node* n = new node;
    n->next=NULL;

    n->name=addName;
    n->surname=addsurName;
    n->idNum=addId;
    n->nationality=addNation;
    n->number=addNum;

    curr = head;
    while(curr->next != NULL){

    curr = curr->next;

    }
    curr->next = n;
    }
    }



    void List::printList(){

    curr=head;

    cout << "\n\t\t\t\t CUSTOMER INFO" << endl << endl;

    cout <<"NAME" << setw(20) << "SURNAME" << setw(20) << "ID NO. " << setw(20) << "NATIONALLITY" << setw(20) << "TELEPHONE" << endl << endl;

    while(curr != NULL){

    cout << curr -> name << setw(20) << curr -> surname << setw(20) << curr -> idNum << setw(20) << curr -> nationality << setw(20) << curr -> number << endl << endl;
    curr=curr->next;

    /*cout<<curr->number << endl;
    cout<<curr->age << endl;
    cout<<curr->idNum << endl;
    cout<<curr->name<< endl;
    cout<<curr->surname << endl;
    cout<<curr->nationality << endl;
    curr = curr->next;

    }
    */

    }
    }

    void List::write_linky(string name,string surName,int idNum,string nation,int number)
    {
    fp.open("Link.dat",ios::out|ios::app);
    lb.AddNode(name,surName,idNum,nation,number);
    lb.printList();
    fp.write((char*)&nod,sizeof(node));
    fp.close();
    cout<<"\n\nThe Data Has Been Added ";

    }


    void List::read_linky(){

    fp.open("Link.dat",ios::in);
    while(fp.read((char*)&nod,sizeof(node)))
    {
    lb.printList();
    //cout<<"\n\n=====================================================\n";
    //getch();
    }
    fp.close();
    //getch();
    }


    int main(){

    List lb;
    int idNum,number;
    string name,surname,nationality;
    char choice,ch;

    cout<<"Please select your choice"<<endl;
    cout<<"1.Book ticket"<<endl;
    cout<<"2.view details"<<endl;
    cin>>ch;

    switch(ch){

         case '1':

         do{
            cout<< "Enter name: ";
            cin>>name;
            cout<< "Enter surname: ";
            cin>>surname;
            cout<< "Enter identification number: ";
            cin>>idNum;
            cout<< "Enter your nationality: ";
            cin>>nationality;
            cout<< "Enter contact number: ";
            cin>>number;


            lb.write_linky(name,surname,idNum,nationality,number);
            //lb.AddNode(number,age,idNum,name,surname,nationality);

            cout<<"\n\nDo you want to add more entry?";
            cin>>choice;

        }while(choice=='y');
        break;


        case '2':
            lb.read_linky();
            break;
    }

    }



        //lb.printList();

1 Ответ

0 голосов
/ 29 сентября 2019

Я никогда не делал этого, но я думаю, string - это сложная структура, которая не поддается записи на диск, как эта.В качестве теста измените их на (скажем) char [255], и это может быть счастливее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...