Кажется, моя программа работает в бесконечном цикле, когда вызывается функция отображения

Следующий отрывок работает для создания нового объекта класса «контакт». create_contact Функция работает, чтобы получить новые данные через функцию-член getdata () и, следовательно, создать новый контакт и прикрепить его к файлу contact_diary в отсортированном виде. Функция display считывает этот файл для отображения списка на экране через функцию-член класса ‘pudata ()’. Однако некоторые ненужные данные учитываются в этих функциях создания и отображения. Пожалуйста, предложите исправления.

void create_contact(){
contact p,q;    //objects
cout<<"Enter data for new contact...";
p.getdata();
contact_diary_renew(); //this function opens and closes a file in out mode
//to refresh it's contnts

fin.open("contact_diary.txt",ios::binary|ios::in);
fin.seekg(0);

if(fin.eof()){             //when file is empty
fout.open("contact_diary.txt",ios::binary|ios::out);
fout.seekp(0);
fout.write((char*)&p,sizeof(p));
fout.close();
}

else{                       //when file is not empty
int position=0,i;
fin.seekg(0);

while(!fin.eof()){  //to get location to enter new data

fin.read((char*)&q,sizeof(q));

if(strcmp(p.givename(),q.givename())<=0){
break;
}

else{
position+=1;
fin.read((char*)&q,sizeof(q));
}

}

fout.open("temp.txt",ios::binary|ios::out); //temporary file

fin.seekg(0);
fout.seekp(0);

for(i=0;i<position;i++){
fin.read((char*)&q,sizeof(q));
fout.write((char*)&q,sizeof(q));
}

fout.write((char*)&p,sizeof(p));

while(!fin.eof()){
fin.read((char*)&q,sizeof(q));
fout.write((char*)&q,sizeof(q));
}

remove("contact_diary.txt");
rename("temp.txt","contact_diary.txt");

fout.close();
}

fin.close();
cout<<"New contact created successfully!"<<endl;
getch();
}

void display_contacts(){     //function to display the list
contact p;  //object
int count=0;

fin.open("contact_diary.txt",ios::binary|ios::in);
fin.seekg(0);

while(!fin.eof()){
fin.read((char*)&p,sizeof(p));
p.showdata();
count+=1;
}

if(count==0){
cout<<"List empty!"<<endl;
}

else{
cout<<"Total number of contacts: "<<count<<endl;
}

fin.close();
getch();
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector