DJYLSY 2016-03-30 11:36 采纳率: 50%

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

#include
#include
#define N 4
struct node{
int score;
};
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);
if(list==NULL)
list=p;
else
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;
}
average2=(double)s/N;
printf("%f",average2);
}
void print(struct node*list)
{
int i;
printf("顺利进入");
if(list==NULL)
printf("这是空链表");
else
{
q=list;
{
printf("%d",q->score);
}
}}
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 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);
if(list==NULL)
list=p;
else
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;
}
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);
}
}}
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)就行了

运行结果：

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

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