求助,C语言怎么将文档中的数据用动态链表按姓名排序。。
发布网友
发布时间:2023-04-23 23:03
我来回答
共1个回答
热心网友
时间:2023-10-10 11:40
struct student* qushuju(struct student* head) //读取数据
{
FILE *p;
struct student *str1,*str2;
int i=0,j=0,k;
char all[100]={0},name[20]={0},xuehao[20]={0},score[20]={0},c;
if((p=fopen("data.dat","r+"))==NULL)
{printf("文件不存在!");getch();exit(0);}
c=fgetc(p);
fgets(all,1000,p); //读取文件中的一行到buf中'
if(strlen(all)<10||strlen(all)>25)
{
fclose(p);
remove("data.dat");
return head;
}
head=(struct student *)malloc(sizeof(struct student));
while(all[i]!=' ')
{name[j]=all[i];i++;j++;}
j=0;i++;
strcpy(head->name,name);
while(all[i]!=' ')
{xuehao[j]=all[i];i++;j++;}
j=0;i++;
strcpy(head->xuehao,xuehao);
while(all[i]!=' ')
{score[j]=all[i];i++;j++;}
strcpy(head->score,score);
head->next=NULL;
while((c=fgetc(p))!= EOF)
{
char all2[100]={0},name2[20]={0},xuehao2[20]={0},score2[20]={0};
str1=(struct student *)malloc(sizeof(struct student));
i=0;j=0;
fgets(all2,1000,p); //读取文件中的一行到buf中'
while(all2[i]!=' ')
{name2[j]=all2[i];i++;j++;}//将文件的内容保存到name2[ ]里面,如果没有遇到空格
j=0;i++;
strcpy(str1->name,name2);//将name2[ ]里面的内容复制到链表里面
while(all2[i]!=' ')
{xuehao2[j]=all2[i];i++;j++;}//将文件的内容保存到xuehao2[ ]里面,如果没有遇到空格
j=0;i++;
strcpy(str1->xuehao,xuehao2);//将xuehao2[ ]里面的内容复制到链表里面
while(all2[i]!=' ')
{score2[j]=all2[i];i++;j++;}//将文件的内容保存到score2[ ]里面,如果没有遇到空格
strcpy(str1->score,score2);//将score2[ ]里面的内容复制到链表里面
str1->next=NULL;//末尾指向空
head=lianjie(head,str1);//将新节点和以前的节点建立连接
}
fclose(p);
return head;
}
这是我的一个读取文本内容到链表中
文件中的内容是这样的
小张 201112050 94
小李 201112051 90
空格那些必须考虑到