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