请高手帮忙修改一下 万分感谢

yf85694846 2010-06-27 09:54:52
#include <stdio.h>
#include<stdlib.h>
struct student
{
char name[10];
long num;
float score;
struct student * next;
};
int n;
struct student * head;
struct student * p1,* p2;
void input(struct student * p)
{
p1=p2=(struct student * )malloc(sizeof(struct student));
head=0;
for(n=1;p1->num!=0;n++)
{
printf("输入第%d个学生:\n",n);
printf("请输入学生的学号(学号为0时,终止输入):");
scanf("%d",&p1->num);
printf("姓名:");
scanf("%s",p1->name);
printf("分数:");
scanf("%f",&p1->score);
if(n==0)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
}
p2->next=0;
}
void average(struct student * p )
{
p=head;
int i;
float average=0;
for(i=0;i<n;i++)
{
average=average+p->score;
p=p->next;
}
average=average/n;
printf("平均成绩为%f分\n",average);
}
void max(struct student * p)
{
p=head;
int i;
float m=p->score;
for(i=0;i<n-1;i++)
{
if(m<p->next->score)
m=p->next->score;
p=p->next;
}
printf("最高成绩为%f分\n",m);
}
void min(struct student * p)
{
p=head;
int i;
float m=p->score;
for(i=0;i<n-1;i++)
{
if(m>p->next->score)
m=p->next->score;
p=p->next;
}
printf("最低成绩为%f分\n",m);
}
void output(struct student * p)
{
p=head;
FILE *fp;
char *filename;
char c[20];
int i;
printf("请输入要存储的文件路径:");
scanf("%s",c);
filename=c;
fp=fopen(filename,"w+");
for(i=0;i<n;i++)
{
fwrite(p,sizeof(struct student),1,fp);
}
printf("保存完毕");
fclose(fp);
}
void main()
{
struct student a;
struct student * p;
input(p);
average(p);
max(p);
min(p);
output(p);
}

执行完input后,按回车没反应 请高手帮忙改一下 详细点 告诉我原因 谢了
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
newfarmerchi 2010-06-28
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<stdlib.h>
struct student
{
char name[10];
long num;
float score;
struct student * next;
};
int n=1;
struct student * head;
struct student * p1,* p2;
struct student *input(struct student * p)
{
p=p1=(struct student * )malloc(sizeof(struct student));
printf("输入第%d个学生:\n",n);
printf("请输入学生的学号(学号为0时,终止输入):");
scanf("%d",&p1->num);
printf("姓名:");
scanf("%s",p1->name);
printf("分数:");
scanf("%f",&p1->score);
p->next=NULL;
p2=p;
for(n=2;p1->num!=0;n++)
{
p1=(struct student * )malloc(sizeof(struct student));
printf("输入第%d个学生:\n",n);
printf("请输入学生的学号(学号为0时,终止输入):");
scanf("%d",&p1->num);
if(p1->num==0)
break;
printf("姓名:");
scanf("%s",p1->name);
printf("分数:");
scanf("%f",&p1->score);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return p;
}
void average(struct student * head)
{
struct student * p=head;
float average=0;
while(p)
{
average=average+p->score;
p=p->next;
}
average=average/(n-1);
printf("平均成绩为%f分\n",average);
}
void max(struct student * head)
{
struct student * p=head;
float m=p->score;
while(p)
{
if(m<p->score)
m=p->score;
p=p->next;
}
printf("最高成绩为%f分\n",m);
}
void min(struct student * head)
{
struct student * p=head;
float m=p->score;
while(p)
{
if(m>p->score)
m=p->score;
p=p->next;
}
printf("最低成绩为%f分\n",m);
}
void output(struct student * head)
{
struct student * p=head;
FILE *fp;
char *filename;
char c[20];
int i;
printf("请输入要存储的文件路径:");
scanf("%s",c);
filename=c;
fp=fopen(filename,"w+");
for(i=0;i<n;i++)
{
fwrite(p,sizeof(struct student),1,fp);
}
printf("保存完毕");
fclose(fp);
}
void main()
{
struct student * p=NULL;
head=input(p);
average(head);
max(head);
min(head);
output(head);
}
liutengfeigo 2010-06-27
  • 打赏
  • 举报
回复
yzx714 2010-06-27
  • 打赏
  • 举报
回复
定个~
yf85694846 2010-06-27
  • 打赏
  • 举报
回复
- -改成这样了 最大最小 平均值出问题了
void input()
{
p1=p2=(struct student * )malloc(sizeof(struct student));
head=0;
for(n=1;;n++)
{
printf("输入第%d个学生:\n",n);
printf("请输入学生的学号(学号为0时,终止输入):");
scanf("%d",&p1->num);
if(p1->num==0)
{
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));
break;
}
printf("姓名:");
scanf("%s",p1->name);
printf("分数:");
scanf("%f",&p1->score);
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));

}
p2->next=0;
}
npuhuxl 2010-06-27
  • 打赏
  • 举报
回复
void input(struct student * p) //函数用p了不?
for(n=1;p1->num!=0;n++)//p1 malloc之后都还没初始化

average(p);//p都没初始化,按照input的函数签名根本不能更改p
void input(struct student ** p)
{
……
*p = head;
}

yf85694846 2010-06-27
  • 打赏
  • 举报
回复
void input()
{
p1=p2=(struct student * )malloc(sizeof(struct student));
head=0;
for(n=1;;n++)
{
printf("输入第%d个学生:\n",n);
printf("请输入学生的学号(学号为0时,终止输入):");
scanf("%d",&p1->num);
if(p1->num==0)
break;
printf("姓名:");
scanf("%s",p1->name);
printf("分数:");
scanf("%f",&p1->score);
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student * )malloc(sizeof(struct student));

}
p2->next=0;
} 我这样修改 输入0以后程序出错了 怎么回事
yf85694846 2010-06-27
  • 打赏
  • 举报
回复
输出函数也错了 不应该有FOR循环 弄明白了 是程序执行的顺序问题~

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧