该程序将从文件中读取您的朋友,并使用链接列表存储您朋友的详细信息。 请注意,您不能对您的朋友数量做出任何假设 朋友的数量没有上限。
有我的代码,它不起作用。我用了strtok ......
文件内容应为:
Name1; Surname1;M;01.06.1990;
Name2;Surname2;F;02.04.1992;
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Friend{
char *name;
char *sur;
char *gen;
char *date;
struct Friend *next;
};
struct Friend * initialize(char *);
void display(struct Friend *);
int main()
{
printf("\nsdasda\n");
struct Friend *head;
char fname[100];
printf("Enter the name of file .txt: \t");
gets(fname);
head=initialize(fname);
display(head);
}
struct Friend * initialize(char *fname){
FILE* fpointer;
char ch;
fpointer = fopen(fname,"r");
if(fpointer == NULL){
do
{
printf("\nFile not found, please enter the name of file again: \t");
gets(fname);
fpointer = fopen(fname,"r");
}while(fpointer == NULL);
}
//FILE IS OPENED
struct Friend *head=(struct Friend*)malloc(sizeof(struct Friend));
struct Friend *t;
t=head;
char line[255];
char sent[2]=";";
while(!feof(fpointer)){
fgets(line,sizeof line,fpointer);
t->name=strtok(line,sent);
t->sur=strtok(NULL,sent);
t->gen=strtok(NULL,sent);
t->date=strtok(NULL,sent);
if(!feof(fpointer)){
t->next=(struct Friend*)malloc(sizeof(struct Friend));
t=t->next;
}
else if(feof(fpointer)){
t->next=NULL;
}
}
return head;
};
void display(struct Friend *head){
puts(head->name);
}
答案 0 :(得分:2)
这里有很多问题,不一定要详尽无遗:
gets
不安全,绝对不能使用。了解如何使用fgets
这是一个更安全的替代方案while(!feof(fpointer))
几乎总是错的。在读完最后一行后,feof
仍为假,只有在第一次不成功的读操作后才会为真。因此,文件结尾的测试必须介于读取和处理数据之间。malloc
!如果你有间接级别错误,它是无用的,只能隐藏编译器警告strdup
来完成它(BTW,这可能是导致您不能正常工作的原因)。malloc
strdup
或内部任何其他功能使用malloc