hasherfrog
Всё верно. разделители нужны....
Считать данные из файла в двухсвязанный список получилось.
Функция views() отображает на экран данные из памяти.
Функция save() -- записывает в фаил из списка. Перед каждым элементом структуры record, переходим на новую сторку
(т.е.разграничиваем --- fprintf(f,"\n%1d",list->sps.expert)
.
функия load() -- считывает из файла в список.
Вот код:
Код:
......
struct expt{int expert;char sport[20];int mesto;};
struct record{expt sps; record *prior;record *next;}*begin,*last,*list;
.......
void views(){
clrscr();
printf("\n Out spicok bd:\n");
list=begin;
while(list){
printf("expert %d: %s -- mesto %d\n",list->sps.expert,list->sps.sport,list->sps.mesto);
list=list->next;
}
getch();
}
void save(char a[]){
FILE *f;
if((f=fopen(a,"w"))==NULL){printf("File could not be opened\n Press any key...");
getch();return;}else{
list=begin;
while(list!=NULL){
fprintf(f,"\n%1d",list->sps.expert);
fprintf(f,"%20s\n",list->sps.sport);
fprintf(f,"%1d",list->sps.mesto);
list=list->next;
}
}
fclose(f);
}
void load(char a[])
{
FILE *f;
if((f=fopen(a,"r+"))==NULL){printf("File could not be opened\n Press any key...");
getch();return;}else{
while(1){if((fgetc(f))==EOF)break;
else{
last=(struct record*)malloc(sizeof(struct record));
if(last==NULL){printf("\n Error !\n No find memory\n Press any key...");getch();return;}
fscanf(f,"%1d",&last->sps.expert);
fscanf(f,"%20s",last->sps.sport);
fscanf(f,"%1d",&last->sps.mesto);
if(begin==NULL){last->prior=NULL;begin=last;last->next=NULL;}
else{list=begin;
while(list){
if(list->next==NULL){
last->next=NULL;
last->prior=list;
list->next=last;
break;
}
list=list->next;
}
}
}
}
}
fclose(f);
}
main()
{
......
}