Мне нужна помощь в выяснении того, как правильно сканировать файл с текстом, чтобы поместить информацию в связанный список. Файл указан:Не удается правильно сканировать файл для LinkedList
12 JackSprat 2 1 65000
13 HumptyDumpty 5 3 30000
17 BoPeep 2 3 30000
20 BoyBlue 3 2 58000
0
0 Является индикатором того, когда файл закончился. Всякий раз, когда я запускаю свой код, он работает 5 раз, но только сохраняет первую строку. Когда я печатаю информацию связанного списка, она просто печатает первую строку 5 раз. Мне нужно прочитать весь файл, а затем остановиться на 0, но я довольно тупой. Вот мой код.
struct employeeData* initializeList(struct employeeData *head, FILE *ifp){
struct employeeData *temptr;
struct employeeData *newnode;
printf("testin\n");
while(!feof(ifp))
{
newnode = (struct employeeData*)malloc(sizeof(struct employeeData));
if (head == NULL)
{
head = newnode;
head->next = NULL;
}
else
{
temptr = head;
while(temptr->next != NULL)
{
temptr = temptr->next;
}
temptr->next = newnode;
}
fscanf(ifp, "%d%s%d%d%lf", &newnode->EMP_ID, &newnode->name, &newnode->dept, &newnode->rank, &newnode->salary);
}
return head;}
Что действительно странно, если я удалю printf ("testin \ n"); затем код выдается из командной строки.
Любопытный: Что или кто предложил использовать 'while (! Feof (ifp))', чтобы определить, когда прекратить чтение? – chux
Прежде всего, не стоит 'while (! Feof (...))', он не будет работать так, как вы ожидаете. Причина в том, что флаг eof не установлен до * после *, который вы пытаетесь прочитать из-за конца файла. Это означает, что ваш цикл будет повторяться один раз для многих, и у вас будет два узла в конце с теми же данными. –
Предложите 'newnode-> name' в' fscanf() ', а не' & newnode-> name'. – chux