#include <stdio.h>
#include "stdlib.h"
#define lined_length 4//宏定义链表的最大长度是4
typedef struct Node{
int data;
int len;//这个用来检测链表的长度
struct Node *next;
}node;//建立一个链表的节点
void lined_list(node *S,int data){
if(S ->len == lined_length){
S ->data = data + 1;//即使是满了也要加1
S ->next = NULL;//当链表中的len等于链表最大值的时候我们就将链表的下一个节点赋值为空指针
}
else if(S ->len >lined_length){
printf("满了!\n");
}
else{//不是的话我们就将下一个节点的之地赋值给现在的地址
node *p = (node *)malloc(sizeof (node));//开辟新的链表空间
S ->data = data;//将输入的值赋值给链表的data
S ->next = p;//将下一个链表的地址赋值给这个链表的next
S ->len = S ->len + 1;//data每次都加1,这样可以加四次
printf("node%d ->data = %d\n",S ->len,S ->data);
}
}
int main() {
int num,i;
scanf("%d",&num);//输入建立多少个表
node *p = (node *)malloc(sizeof (node));//开辟一个内存空间,将地址返回给p
if(p==NULL){
printf("开辟失败!\n");
}
else{
printf("开辟成功!\n");
}
p ->data = 0;
p ->len = 0;
p ->next = NULL;//对p进行初始化
for(i = 0;i<num;i++){
lined_list(p,num++);
}
return 0;
}
在这段代码main函数的for循环中,如果我执行代码时是lined_list(p,num++)那么结果无论如何都会输出循环四次的结果,但是我用lined_list(p,num)就只会执行num输入的次数,大于四次的也是输出四次,这是为什么呢?请大家赐教
你定义了#define lined_length 4//宏定义链表的最大长度是4
然后执行到 if(S ->len == lined_length) len等于4的时候
len就不会+1了 后面的都不会输出了...
最简单的解决办法是写打印语句跟踪变量的变化,学会调试
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y