Почему зацикливается программа после выполнения функции загрузки? - 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;
}

Объяснение кода листинга программы

  1. В начале функции определяется указатель на голову списка (head).
  2. Создается новый элемент списка (cur), выделяется память под него.
  3. Если список не пустой, то в цикле while с помощью fscanf считываются данные из файла и заполняют поля нового элемента списка.
  4. После заполнения нового элемента, он добавляется в конец списка (cur=cur->next).
  5. Указатель на голову списка (head) меняется на новый элемент списка.
  6. Если память под новый элемент списка не удалось выделить (cur==NULL), то выводится сообщение об ошибке и программа завершается.
  7. В конце функции, файл закрывается и возвращается указатель на голову списка.
  8. При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  9. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  10. При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  11. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  12. При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  13. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  14. При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  15. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  16. При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  17. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  18. При вызове функции zagruzka(head), где head!=NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  19. При вызове функции zagruzka(cur), где cur==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.
  20. При вызове функции zagruzka(head), где head==NULL, в начало списка будет добавлен новый элемент и указатель на голову списка будет head=cur.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы