Я пытаюсь создать связанный список, содержащий числа, и записать эти числа в файл, а затем прочитать один и тот же файл и прочитать данные в файле и распечатать их номера.C: выходные ошибки связанные списки и запись в файл и чтение из файла
Что я думаю проблема в том, что что-то не так при чтении файла.
Я добавил инструкции som print для отладки, и при печати того, что я пишу в файл, это выглядит нормально. Но когда я читаю файл и печатаю, я получаю первый номер, введенный пользователем дважды. например:
input: 1,2,3
output:3,2,1,1
Я не знаю, есть ли проблема с моим связанным списком, запись в файл или, если это чтение. Поэтому я был бы признателен за любые материалы, которые помогут мне лучше понять.
Благодаря
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct postTyp
{
int num;
struct postTyp *next;
}postTyp;
FILE *fp;
int main()
{
postTyp *l, *p; //l=list , p=pointer
l = NULL;
p=malloc(sizeof(postTyp));
//Creates linked list until user enters 0
printf("Enter a number, 0 to exit: ");
scanf("%i", &p->num);
while (p->num != 0)
{
p->next=l;
l=p;
p=malloc(sizeof(postTyp));
printf("Enter a number, 0 to exit: ");
scanf("%i", &p->num);
}
free(p);
p=l;
//write the linked list to file
fp = fopen("test.txt", "w");
while(p->next != NULL)
{
printf("%2i", p->num);
fwrite(p, 1, sizeof(postTyp), fp);
p=p->next;
}
printf("%2i", p->num);
fwrite(p, 1, sizeof(postTyp), fp);
fclose(fp);
printf("\n");
//Code below to read the file content and print the numbers
fp = fopen("test.txt", "r");
fread(p,sizeof(postTyp),1,fp);
fseek(fp,0,SEEK_SET);
//The first number entered at the beginning, will be printed twice here.
while(!feof(fp))
{
fread(p,sizeof(postTyp),1,fp);
printf("-----\n");
printf("%i\n", p->num);
}
fclose(fp);
return 0;
}
Ваша мысль о чем-то неправильном при чтении файла верна: Возможный дубликат [Why is "while (! Feof (file))" всегда неправильно? "(Http://stackoverflow.com/questions/5431941/why -is-то время-feof-файлы всегда-неправильно). –
while (p-> tal! = 0). где вы определили члена «tal»? –
спасибо, ребята, все комментарии помогли, когда поняли проблему с! Feof – Taimour