血墨 2017-10-15 06:08 采纳率: 66.7%
浏览 793
已采纳

C语言 在编写链表是时候出现了这样的问题 求解

include

include

include

typedef struct student
{
char name[1];
float score[1];
struct student next;
}STU;
STU *myCreatelist(STU *head)
{
STU *q,*p;
char temp[10];
int flag=1;
float t=0;
head=(STU
)malloc(sizeof(STU));
head->next=NULL;
q=head;
while(flag)
{
p=(STU*)malloc(sizeof (STU));
p->next=NULL;
printf("input name\n");
scanf("%s",temp);
printf("input score\n");
strcpy(p->name,temp);
scanf("%f",&t);
p->score[0]=t;
q->next=p;
q=p;
printf("inpuut flag\n");
scanf("%d",&flag);
}
p=head->next;
while(p)
{
printf("name is :%s\n",p->name);
printf("score is :%.2f\n",p->score[0]);
p=p->next;
}
printf("\n");
return head;
}
void main ()
{
STU *head,*p,*q;
head=myCreatelist(head);
q=head->next;
while (q=q->next)
{
if(!strcmp (q->next->name,"x6"))
{
p=q->next;
q->next=p;
break;
}
}
p=head;
while (p=p->next)
{
printf("name is :%s\n",p->name);
printf("score is :%f\n",p->score[0]);
p=p->next;
}
}
图片说明

  • 写回答

4条回答 默认 最新

  • Saeba 2017-10-15 12:58
    关注

    main() 當中的這句話 會產生衝突

    head=myCreatelist(head);

    因為你把 head 指針傳入含數 myCreatelist 當中 然後去接受 malloc 產生的記憶體位址. 這時你的 head 指針運行到上面這行 拆分成兩部分

    myCreatelist(head); <== 會讓你取得 malloc() 的內存指針. 然而當你 加上 head = 在函數前頭時. head 又被改變成 ,myCreatelist() 含數指針.

    所以把 maim() 當中的這行 head=myCreatelist(head); 改成 myCreatelist(head); 即可 !

    這樣一來編譯不會錯誤, 若是只有警告, 也不會因為運行了 head=myCreatelist(head); 造成錯亂.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码