DJYLSY 2016-03-30 11:36 采纳率: 50%
浏览 1498
已采纳

程序中定义的全局变量,list 在input中已经赋值,为什么print函数中List=null?

#include
#include
#define N 4
struct node{
int score;
struct node*link;
};
struct node node;
struct node*list,*p,*r,*q;
void input(struct node*list)
{
int i;
int ch;
for(i=0;i {
printf("please input the score of %d\t",i+1);
p=(struct node*)malloc(sizeof(struct node*));
scanf("%d",&p->score);
p->link=NULL;
if(list==NULL)
list=p;
else
r->link=p;
r=p;
printf("数据为%d",p->score);
}
}
void average(struct node*list)
{
int s=0,i;
double average2;
if(list==NULL)
printf("链表为空");
for(i=0;i {
s+=list->score;
list=list->link;
}
average2=(double)s/N;
printf("%f",average2);
}
void print(struct node*list)
{
int i;
printf("顺利进入");
if(list==NULL)
printf("这是空链表");
else
{
q=list;
while(q->link!=NULL)
{
printf("%d",q->score);
q=q->link;
}
}}
int main()
{
void input(struct node*list);
void average(struct node*list);
void print(struct node*list);
int ah;
system("cls");
while(1){
printf("链表操作系统:");
printf("\n1.建立链表\n2.输出数据\n3.求平均数\n");
scanf("%d",&ah);
switch(ah){
case 1:input(list);break;
case 2:print(list);break;
case 3:average(list);break;
default:printf("wrong!");break;
}}}

  • 写回答

3条回答 默认 最新

  • 小灸舞 2016-03-30 12:06
    关注

    楼主直接复制跑一下

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    #define N 4
    struct node{
        int score;
        struct node*link;
    };
    struct node node;
    struct node*list,*p,*r,*q;
    void input()
    {
        int i;
        int ch;
        list = NULL;
        for(i=0;i < N; i++)
        {
            p=(struct node*)malloc(sizeof(struct node));
            printf("please input the score of %d\t",i+1);
            scanf("%d",&p->score);
            p->link=NULL;
            if(list==NULL)
                list=p;
            else
                r->link=p;
            r=p;
            printf("数据为%d",p->score);
        }
    }
    void average()
    {
        int s=0,i;
        double average2;
    
        if(list==NULL)
            printf("链表为空");
        for(i=0;i < N; i++)
        {
            s+=list->score;
            list=list->link;
        }
        average2=(double)s/N;
        printf("平均值为:%lf\n",average2);
    }
    void print()
    {
        int i;
        printf("顺利进入\n");
        if(list==NULL)
            printf("这是空链表");
        else
        {
            q=list;
            while(q!=NULL)//这里只需要判断q就行
            {
                printf("%d\n",q->score);
                q=q->link;
            }
        }}
    int main()
    {
        void input();
        void average();
        void print();
        int ah;
        system("cls");
        while(1){
            printf("链表操作系统:");
            printf("\n1.建立链表\n2.输出数据\n3.求平均数\n");
            scanf("%d",&ah);
            switch(ah){
            case 1:input();break;
            case 2:print();break;
            case 3:average();break;
            default:printf("wrong!");break;
            }
        }
    }
    

    有几个问题:
    1.既然list指针已经变成全局的了,就不要传参了,楼主那样传一级指针是没有用的,操作的都是list的一个副本,所以就算插入的代码没错,
    也会输出是空链表(传二级指针可以解决)
    2.输出的函数里while循环只要判断while(q!=NULL)就行了

    运行结果:
    图片说明

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

报告相同问题?

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图