Задание: Написать функцию для записи в файл массива структур. Чтобы решить данную задачу решил воспользовать Подбельским. Все написал та как было у него в книге... и в функции input() компилятор обнаружил ошибку: не описан указатель fbeg, но я его описал - строка помечена (*) (Кстати, может я его неправильно и описал). Программа запускается, но почему то не работает(((((( Показывает только меню программмы и все.....в чем может быть проблема? подскажите,пожалуйста или поправьте), если не трудно | Код | #include<stdio.h> #include<conio.h> #include<stdlib.h>
struct team { char name[20]; char city[20]; int count_games; char L_W_T[10]; int players; struct team *prior; struct team *next; } st[100]; //opredelen massiv structur;
const int M=100; struct control { int nb; int nf; struct team *bbeg; struct team *bend; struct team *fbeg; struct team *fend; } ctrl;
int init (void); int input(void); int save (void);
//////////////MAIN////////////////////////////////// void main(void) { char numb[10]; while(1) { printf("1 - Add NEW team\n"); printf("2 - Save in file\n"); printf("3 - Init\n"); printf("4 - Exit\n"); scanf("%s",numb);
switch(numb[0]) { case '1':input(); break; case '2':save(); break; case '3':init(); break; case '4':return; default: printf("Input only 1-4\n"); } } } ////////////////////////////////////////////////////////////////////////////
int init(void) { struct team *point=st; //ukazatel na tek element int i; ctrl.nb=0; //chislo zanytuch elementov ctrl.nf=0; //chislo svobodn elementov ctrl.bbeg=NULL; ctrl.bend=NULL; //spiska zanyatyuch elementov net ctrl.fbeg=st; //adres nachala massiva struct ctrl.fend=st; point=st; //printf("\n\n Init\n"); for (i=0;i<M-1;i++) { if (ctrl.nf!=0) //ne perv element { point->prior=point-1; point->next=point+1; } else //perv element { point->prior=NULL; point->next=point+1; } point++; ctrl.nf++; ctrl.fend++; } //conec cikla init (M-1) elementov massiva //Init poslednego elementa v massive ctrl.nf++; point->prior=point-1; point->next=NULL; return 0; }
////////////////////////////////////////////////////////////////////////////
int input(void) { struct team *fbeg; struct team *ptr; //vspomagateln ukazatel if (ctrl.nf==0) return -1; ptr=fbeg; printf("Input the name of team:\n"); scanf("%s",fbeg->name); printf("Input the city of team:\n"); scanf("%s",ptr->city); printf("How many games played team?\n"); scanf("%d",&ptr->count_games); printf("L-W-T\n"); scanf("%s",ptr->L_W_T); printf("How many players in team?\n"); scanf("%d", &ptr->players); //Podkluchenie elementa k spisku zanyatuch if (ctrl.nf==1) //zanimayem poslednee { ctrl.fbeg=NULL; ptr->next=NULL; ptr->prior=ctrl.bend; ctrl.bend->next=ptr; ctrl.bend=ptr; ctrl.fend=NULL; } else { if (ctrl.nb==0) ctrl.bbeg=ptr; ctrl.fbeg=ptr->next; ptr->next=NULL; ptr->prior=ctrl.bend; ctrl.bend->next=ptr; ctrl.bend=ptr; ctrl.fbeg->prior=NULL; //nov pervyu v spiske svobodn elementov } ctrl.nb++; ctrl.nf--; return 0; } ////////////////////////////////////////////////////////////////////////////
int save(void) { int i,k; struct team *ptr; //ukazatel na structuru tipa person char *c; //ukazatel na simvol int *pti; //ukazatel na celoe FILE *fp; //ukazatel na potok if ((fp=fopen("bd.txt","w"))==NULL) {perror("bd.txt"); return -1;} if (ctrl.nb==0) return -1; else { ptr=st; //zapis info pti=&ctrl.nb; //nachalo bloka upravl info c=(char *)pti;//nastroika ukazatelya //cikl vvoda upravl info for(i=0;i<sizeof(ctrl); i++) putc(*c++, fp); //cikl vvoda v fail vsego massiva struct c=(char *)ptr; //nastroika ukazatelya for(k=0;k<sizeof(st);k++) putc(*c++,fp); fclose(fp); return 0; } }
|
Это сообщение отредактировал(а) Rodman - 18.5.2008, 21:34
|