指针p的用法,全程很多错误。指针在使用之前,要先赋值,并指向正确的位置。
#define N 3
#include "stdio.h"
typedef struct {
int num;
char name[10];
char sex;
int age;
float score[3];
float sum;
float avg;
}STUDENT;
void count(STUDENT *p); /*这个函数的参数改成数组更好,改为void count(STUDENT stu[] )*/
void main()
{int i,j;
float t;
STUDENT stu[N],*p;
/*
下面这个for语句中,你似乎想通过p指向每个学生记录,并挨个输入学生信息,最后再计算出成绩。
所以在for语句开始执行之时,要让p指向每个学生的记录 */
for(i=0;i
p=stu+i; /*加上这一行,使之指向每个学生的记录*/
{printf("输入num,name,sex,age:");
scanf("%d %s %c %d",p->num,p->name,p->sex,p->age);}
for(j=0;j<3;j++)
{ printf("输入第%d门课成绩:",j+1);
scanf("%f",p->score[j]);
p++; /*这里的指针p不能++,否则for(i=0;i
}
count(p); /*看你的count函数的实现,是要计算并打印出所有学生的信息,这里传入指针p调用是错误的,因为此时p不是指向第一个学生的记录。这里应改为count(stu),传入所有学生的记录数组*/
p++; /*这行要删除,没意义*/
}
void count(STUDENT str[]) /* 这里的参数,由*p改为str[]。用指针传也可以,但要指向第一个学生*/
/* 记录。不过用数组传入,代码的可读性更好 */
{int i,j;
float t;
for(i=0;i
t=0;
这里加上一行,让p依次指向每个学生的记录:p=stu+i;
t=p->score[0]+p->score[1]+p->score[2];
p->sum=t;
p->avg=t/3;
p++; /*这一行删掉*/
}
for(i=0;i
/*这里加一行p=stu+i,让p指向每一个学生的记录*/
printf("第%d名学生num,name,sex,age:",i+1);
printf("%d%s%c%d",p->num,p->name,p->sex,p->age);
for(j=0;j<3;j++)
{ printf("第%d门课成绩:",j+1);
printf("%f",p->score[j]);}
printf("总成绩: %f 平均成绩: %f \n", p->sum, p->avg);
}
}
#define N 3
#include "stdio.h"
typedef struct {
int num;
char name[10];
char sex;
int age;
float score[3];
float sum;
float avg;
}STUDENT;
void count(STUDENT *p);
void main()
{int i,j;
float t;
STUDENT stu[N],*p;//在这加句 p=new STUDENT;
for(i=0;i
scanf("%d %s %c %d",p->num,p->name,p->sex,p->age);}//错在这里,这里你没给P分配空间就用了
for(j=0;j<3;j++)
{ printf("输入第%d门课成绩:",j+1);
scanf("%f",p->score[j]);
p++;
}
}
count(p);
p++;
}
void count(STUDENT *p)
{int i,j;
float t;
for(i=0;i
t=0;
t=p->score[0]+p->score[1]+p->score[2];
p->sum=t;
p->avg=t/3;
p++;
}
for(i=0;i
printf("%d%s%c%d",p->num,p->name,p->sex,p->age);
for(j=0;j<3;j++)
{ printf("第%d门课成绩:",j+1);
printf("%f",p->score[j]);}
printf("总成绩: %f 平均成绩: %f \n", p->sum, p->avg);
}
}
写的好乱 不知道要表达什么目的