首先,你的结构体出现问题。
struct student
{
char name;
int number;
float graduate[3];
float ave;
}stu[3];
这里定义的是char name,而你输入数据时候却用%s这个格式控制符。要么你就改成%c,要么你就把char name改成char name[20]。
第二点,
for(i=1;i<=3;i++)
printf("name:\n");
scanf("%s",&stu[i].name);
printf("number:\n");
scanf("%d",&stu[i].number);
for(j=1;j<=3;j++)
{printf(" grades:\n");
scanf("%f",&stu[i].graduate[j]);
}
这里第一个for循环没有加大括号,结果执行起来i=3。也就是说只会输入一个stu[3].name,stu[3].number等数据。
大致就是这么几个错,自己好好改改吧。祝你成功~
for循环的括号你忘加了;stu[i].graduate[j]的输出应为浮点型。
你的程序可以修改成这样:
#include
struct student
{
char name[20];
int number;
float graduate[3];
float ave;
}stu[3];
void main()
{
void input();
void average();
void output();
input();
average();
output();
}
void input()
{
int i,j;
for(i=0;i<3;i++)
{
printf("name:\n");
scanf("%s",stu[i].name);
printf("number:\n");
scanf("%d",&stu[i].number);
printf("grades:\n");
for(j=0;j<3;j++)
{
scanf("%f",&stu[i].graduate[j]);
}
}
}
void average()
{
stu[0]. ave=(stu[0].graduate[0]+stu[0].graduate[1]+stu[0].graduate[2])/3;
stu[1]. ave=(stu[1].graduate[0]+stu[1].graduate[1]+stu[1].graduate[2])/3;
stu[2]. ave=(stu[2].graduate[0]+stu[2].graduate[1]+stu[2].graduate[2])/3;
}
void output()
{
int i,j;
for(i=0;i<3;i++)
{
printf("name:%-5s.\n",stu[i].name);
printf("number:%d.\n",stu[i].number);
printf("the grades:\n");
for(j=0;j<3;j++)
{
printf("%f\n",stu[i].graduate[j]);
}
printf("the average is:%f\n",stu[i].ave);
}
}
此处应该加括号{ }:
for(i=1;i<=3;i++)
printf("name:\n");
scanf("%s",&stu[i].name);
printf("number:\n");
scanf("%d",&stu[i].number);
主要问题在这里:
struct student
{
char name;
int number;
float graduate[3];只是声明了指针,没有实际的float型数据用来存放graduate
所以每次到输入graduate的时候都会出错~!
如果你用的tc的话main函数里的float arg,*point=&arg;必须存在
否则就回出现BUG;
#include
struct student
{
long number;
char name[10];
float score[3];
float sum1;
};
struct student a[5];
void scan(struct student *p)
{
scanf("%ld%s%f%f%f",&p->number,p->name,&p->score[0],
&p->score[1],&p->score[2]);
}
void sum(struct student *p)
{
p->sum1=(p->score[0]+p->score[1]+p->score[2]);
}
void print(struct student *p)
{
printf("%ld: %s: %5.2f %5.2f %5.2f %5.2f\n",p->number,
p->name,p->score[0],p->score[1],p->score[2],p->sum1);
}
void main()
{
float arg,*point=&arg;
int i;
for(i=0;i<5;i++)
scan(a+i);
for(i=0;i<5;i++)
sum(a+i);
printf("the result:\n");
for(i=0;i<5;i++)
print(a+i);
}
把错误码贴出来呀。。。。