Почему данные с файла считываются некорректно?
В файле хранятся имя-пол-возраст, необходимо занести данные из файла в двусвязный список. Код работает, если в файле один человек. Если в файле инфа по двум человекам, вывод зацикливается, видимо теряется NULL, который указывает на конец при выводе...Но не понимаю, где я его теряю?
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
#include <stdio.h>
#include <stdlib.h>
typedef struct data{
char name[16];
char sex[16];
int age;
}dataT;
typedef struct node{
dataT* data;
struct node* next, *prev;
}node;
typedef struct hwnd{
size_t size;
node* head, *tail;
}hwnd;
hwnd* createHwnd(); //создание дискриптора списка
void unloadData_FromFile(FILE*,hwnd*);
void showList(node*); //вывод
void uploadList(node*, hwnd*);
int main(int agrc, char** argv)
{
char s[16]; int x;
hwnd* hwnd = createHwnd();
FILE* file = fopen("vector", "wb+");
gets(s); //ввод имени
fwrite(s, sizeof(char), 16, file);
gets(s); //ввод пола
fwrite(s, sizeof(char), 16, file);
scanf("%d", &x); getchar(); //возраст
fwrite(&x, sizeof(int), 1, file);
unloadData_FromFile(file, hwnd);//считывание файла в вектор
showList(hwnd->head);
// clearMemory(hwnd);
fclose(file);
return 0;
}
void unloadData_FromFile(FILE* file, hwnd* hwnd)
{
int x; char s[16];
rewind(file);
dataT* pData = (dataT*)malloc(sizeof(dataT)); //память под данные узла
node* temp = (node*)malloc(sizeof(node)); //память под узел
while(fread(pData->name, sizeof(char), 16, file)) //считываем имя
{
fread(pData->sex, sizeof(char), 16, file); //считываем пол
fread(&pData->age, sizeof(int), 1, file); //считываем возраст
temp->data = pData; //копируем адрес структуры в поле для данных
uploadList(temp, hwnd); //добавляем узел в вектор
}
}
void uploadList(node* temp, hwnd* hwnd)
{
temp->prev = hwnd->tail;
temp->next = NULL;
if (hwnd->tail)
hwnd->tail->next = temp;
else
hwnd->head = temp;
hwnd->tail = temp;
}
void showList(node* head)
{
int id = 0;
puts("|ID| NAME | SEX | AGE |");
while(head)
{
printf("|%2d|%10s|%7s|%5d|\n", id++, head->data->name, head->data->sex, head->data->age);
head = head->next;
}
return;
}
hwnd* createHwnd()
{
hwnd* temp = (hwnd*)malloc(sizeof(hwnd));
temp->head = NULL;
temp->tail = NULL;
temp->size = 0;
return temp;
}
По дате
По рейтингу
А для каких целей считывание структуры делается по-элементно?
fread(pData, sizeof(DataT), 1, file)
хз