关于C语言使用链表循环的一个小问题。

#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