Почему зацикливается программа после выполнения функции загрузки? - C (СИ)
Формулировка задачи:
Вот моя функция, после её выполнения программа зацикливается.
ITEM* zagruzka(ITEM *head) { ITEM *cur; FILE *f; cur=(ITEM*)malloc(sizeof(ITEM)); if((f=fopen("C:/TURBOC3/BIN/park.dat","rb"))==NULL) { printf("Errors"); getch(); } cur=head; fseek(f,0,SEEK_SET); while(!feof(f)) { fscanf(f,"%s",cur->name); fseek(f,1,SEEK_CUR); fscanf(f,"%s",cur->kat); fseek(f,1,SEEK_CUR); fscanf(f,"%d",cur->gv); fseek(f,1,SEEK_CUR); fscanf(f,"%f",cur->weight); fseek(f,1,SEEK_CUR); fscanf(f,"%f",cur->dvig); fseek(f,1,SEEK_CUR); cur->num=num; num++; cur=cur->next; } fclose(f); return head; }
Решение задачи: «Почему зацикливается программа после выполнения функции загрузки?»
textual
Листинг программы
ITEM* zagruzka(ITEM *head) { ITEM *cur; FILE *f; if((f=fopen("C:/TURBOC3/BIN/park.dat","rb"))==NULL) { puts("Error"); getch(); return 0; } cur=(ITEM*)malloc(sizeof(ITEM)); if(cur==NULL) { puts("Error memory"); getch(); return 0; } cur=head; if(head!=NULL) {while(cur->next!=NULL) {cur=cur->next; } } while(!feof(f)) { fscanf(f,"%s",cur->name); fseek(f,1,SEEK_CUR); fscanf(f,"%s",cur->kat); fseek(f,1,SEEK_CUR); fscanf(f,"%d",cur->gv); fseek(f,1,SEEK_CUR); fscanf(f,"%f",cur->weight); fseek(f,1,SEEK_CUR); fscanf(f,"%f",cur->dvig); fseek(f,1,SEEK_CUR); cur->num=num; num++; cur=cur->next; } fclose(f); return head; }
Объяснение кода листинга программы
- В начале функции определяется указатель на голову списка (head).
- Создается новый элемент списка (cur), выделяется память под него.
- Если список не пустой, то в цикле while с помощью fscanf считываются данные из файла и заполняют поля нового элемента списка.
- После заполнения нового элемента, он добавляется в конец списка (cur=cur->next).
- Указатель на голову списка (head) меняется на новый элемент списка.
- Если память под новый элемент списка не удалось выделить (cur==NULL), то выводится сообщение об ошибке и программа завершается.
- В конце функции, файл закрывается и возвращается указатель на голову списка.
- При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
- При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д