Случай 2, когда код не выполняется.Может ли кто-нибудь сообщить мне о требуемом изменении

#c

#c

Вопрос:

 //Telephone Directory

#include <iostream>
#include <fstream>
#include <string.h>
#include <iomanip>
#include <conio.h>
#include<stdlib.h>
using namespace std;

class phoneBook{
    char name[20],phno[15];
    public:
    void getdata();
    void showdata();
    char *getname(){ return name; }
    char *getphno(){ return phno; }
    void update(char *nm,char *telno){
        strcpy(name,nm);
        strcpy(phno,telno);
    }
};

void phoneBook :: getdata(){
    cout<<"nEnter Name : ";
    cin>>name;
    cout<<"Enter Phone No. : ";
    cin>>phno;
}

void phoneBook :: showdata(){
    cout<<"n";
    cout<<setw(20)<<name;
    cout<<setw(15)<<phno;
}


int main(){
    phoneBook rec;
    fstream file;
    file.open("phone.dat",  ios::in | ios::binary);
    char ch,nm[20],telno[6];
    int choice,found=0;
    int cnt=0;
    while(1)
        {
        system("cls");
        cout<<"n*****Phone Book*****n";
        cout<<"1) Add New Recordn";
        cout<<"2) Display All Recordsn";
        cout<<"3) Search Telephone No.n";
        cout<<"4) Search Person Namen";
        cout<<"5) Update Telephone No.n";
        cout<<"6) Exitn";
        cout<<"Choose your choice : ";
        cin>>choice;
        switch(choice)
        {
            case 1 : //New Record
                 rec.getdata();
                 cin.get(ch);
                 file.write((char *)amp;rec, sizeof(rec));
                 break;

            case 2 : //Display All Records
                 file.seekg(0,ios::beg);
                 cout<<"nnRecords in Phone Bookn";
                 while(file)
                    {
                    file.read((char *)amp;rec, sizeof(rec));
                    if(!file.eof())
                    rec.showdata();

                 }
                 file.clear();
                 getch();
                 break;

            case 3 : //Search Tel. no. when person name is known.
                 cout<<"nnEnter Name : ";
                 cin>>nm;
                 file.seekg(0,ios::beg);
                 found=0;
                 while(file.read((char *) amp;rec, sizeof(rec)))
                 {
                    if(strcmp(nm,rec.getname())==0)
                    {
                        found=1;
                        rec.showdata();
                    }
                 }
                 file.clear();
                 if(found==0)
                    cout<<"nn---Record Not found---n";
                 getch();
                 break;

            case 4 : //Search name on basis of tel. no
                 cout<<"nnEnter Telephone No : ";
                 cin>>telno;
                 file.seekg(0,ios::beg);
                 found=0;
                 while(file.read((char *) amp;rec, sizeof(rec)))
                 {
                    if(strcmp(telno,rec.getphno())==0)
                    {
                        found=1;
                        rec.showdata();
                    }
                 }
                 file.clear();
                 if(found==0)
                    cout<<"nn---Record Not found---n";
                 getch();
                 break;

            case 5 : //Update Telephone No.
                 cout<<"nnEnter Name : ";
                 cin>>nm;
                 file.seekg(0,ios::beg);
                 found=0;

                 while(file.read((char *) amp;rec, sizeof(rec)))
                 {
                    cnt  ;
                    if(strcmp(nm,rec.getname())==0)
                    {
                        found=1;
                        break;
                    }
                 }
                 file.clear();
                 if(found==0)
                    cout<<"nn---Record Not found---n";
                 else
                 {
                    int location = (cnt-1) * sizeof(rec);
                    cin.get(ch);
                    if(file.eof())
                        file.clear();

                    cout<<"Enter New Telephone No : ";
                    cin>>telno;
                    file.seekp(location);
                    rec.update(nm,telno);
                    file.write((char *) amp;rec, sizeof(rec));
                    file.flush();
                 }
                 break;
            case 6 :
            return 0;
                default:


file.close();
}
}
}
  

Я не могу отобразить данные, хранящиеся в файле, используя вариант 2?? почему???

Комментарии:

1. Похоже, что вы показываете содержимое только после чтения всего файла и ожидаете, что eof не будет установлен. Удалите эту if(!file.eof) строку и повторите попытку.

Ответ №1:

Мне удалось запустить код, когда я указал дополнительный режим файла ios::app. Это приводит к тому, что все операции вывода выполняются в конце файла. Проблема в том, что вы вообще не указали какой-либо режим выходного файла, и write метод дал сбой, поэтому ваш файл .dat не содержал никаких записей.

 file.open("phone.dat", ios::in | ios::app | ios::binary);
  

Я тестировал только случаи 1 и 2.