wenxianmu_ 2021-04-17 20:51 采纳率: 33.3%
浏览 41
已采纳

关于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输入的次数,大于四次的也是输出四次,这是为什么呢?请大家赐教

  • 写回答

4条回答 默认 最新

  • 猫夏i 2021-04-17 22:21
    关注

    你定义了#define lined_length 4//宏定义链表的最大长度是4

    然后执行到 if(S ->len == lined_length)  len等于4的时候

    len就不会+1了 后面的都不会输出了...

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

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流