YING_ZHOU 2020-03-06 17:01 采纳率: 0%
浏览 114

C语言链表排序后为啥不能输出 求大佬解答

#include
#include
#include
#include
#include
struct people
{
char name[20];
char phone[30];
char email[30];
struct people *next;
};

int main()
{
struct people * head;
struct people *creat();
void sort(struct people *head);

head=creat();
sort(head);

return 0;

}

struct people creat()
{
struct people * head;
struct people *p1,*p2;
void save(struct people *p1);
int i,n;
p1=p2=(struct people
)malloc(sizeof(struct people));
i=1;
n=0;
head=NULL;
printf("请输入:\n");
while(i==1)
{
printf("姓名:");
scanf("%s",&p1->name);
printf("电话:");
scanf("%s",&p1->phone);
printf("Email:");
scanf("%s",&p1->email);
save(p1);
if(n==0) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct people *)malloc(sizeof(struct people));
n=n+1;
printf("继续输入请按1,退出请按0.\n");
scanf("%d",&i);
}
p2->next=NULL;
return(head);
}

void save(struct people *p)
{
FILE *fp;
char name[20];
printf("文件名称:");
scanf("%s",name);
if((fp=fopen(name,"wb"))==NULL)
{
printf("cannot open file\n");
return;
}
if(fwrite(p,sizeof(struct people),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

void sort(struct people *head)
{
struct people *p1,*p2,*tail,*p;
tail=NULL;
while((head->next->next)!=NULL)
{
p1=head;
p2=head->next;
while((p1->next->next)!=NULL)
{
if(strcmp((p1->name),(p1->next->name))>0)
{
p1->next=p2->next;
p2->next=p2->next->next;
p1->next->next=p2;
p2=p1->next;
}
p1=p1->next;
p2=p2->next;
}
tail=p2;
}
p=head;
do
{printf("姓名:%s 电话:%s\n",p->name,p->phone);
p=p->next;
}while(p!=NULL);
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-29 17:41
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办