C语言动态链表结构体无法获取输入数据,列表无输出问题求助
问题原因与修复方案
嘿,我一眼就瞅出问题所在了——你踩了C语言值传递的经典坑,导致链表头指针根本没被正确更新!
核心问题:没接收insertNode的返回值
C语言里函数参数是值传递,意思是你把main里的head传给insertNode时,函数拿到的只是这个指针的一份拷贝。insertNode内部确实给新节点分配了内存,也把内部的head指针指向了它,但这个修改只在函数内部有效——main里的原始head还是NULL!这就导致你每次插入完,链表头根本没变化,调用visualizer自然啥都打不出来。
另外还有个小细节:用scanf读字符串的时候,temp->modello本身就是数组的首地址,不需要加&,写成scanf("%s", temp->modello);就够了(temp->colore同理),不过这个只是写法冗余,不是导致无输出的主因。
怎么修复?
- 更新
main里的调用代码:把insertNode(head);改成head = insertNode(head);,这样才能把insertNode返回的新链表头赋值给main里的head,让它真正指向链表的第一个节点。 - 优化
scanf的写法:去掉字符串参数前的&,避免不必要的混淆。
修复后的关键代码片段
// main函数中case 1的修改 case 1: head = insertNode(head); // 必须接收返回的新头指针 break; // insertNode中scanf部分的优化 printf("Inserire il modello dell'auto: "); scanf("%s", temp->modello); // 移除多余的& printf("Inserire il colore dell'auto: "); scanf("%s", temp->colore); // 移除多余的&
这样改完之后,你插入的车辆信息就能被正确存入链表,调用查看功能时就能正常输出所有数据啦!
内容的提问来源于stack exchange,提问作者Il_Kevo
相关产品推荐
相关产品推荐

