#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char *name;
int score;
};
int main()
{
int i;
int len;
printf("请输入学生个数:\n");
scanf("%d",&len);
// struct student a[3];
// struct student *p;
struct student *p=(struct student *)malloc(len*sizeof(struct student));
// p=a;
for(i=0;i<len;i++)
{
printf("请输入第%d个学生的姓名:",i+1);
p->name=(char *)malloc(128);
scanf("%s",p->name);
printf("请输入该学生的分数:");
scanf("%d",&(p->score));
p++;
}
p=p-len;//p=a
for(i=0;i<len;i++)
{
printf("%s的分数是%d\n",p->name,p->score);
p++;
}
return 0;
}
新增添功能,求出分数最大最小的同学
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char *name;
int score;
};
int main()
{
int i;
int len =0;
printf("请输入学生个数:");
scanf("%d",&len);
struct student a[len];
struct student *p;
p=a;
struct student maxScore;
struct student minScore;
maxScore=a[0];
minScore=a[0];//假设最大最小值都是第一个学生
for(i=0;i<len;i++)
{
printf("请输入第%d个学生的姓名:",i+1);
p->name=(char *)malloc(sizeof(a[0])*len);
scanf("%s",p->name);
printf("请输入该学生的分数:");
scanf("%d",&(p->score));
p++;
}
p=p-len;//上面得到循环指针指向最后,要返回开始
for(i=0;i<len;i++)
{
printf("%s的分数为:%d\n",p->name,p->score);
p++;
}
for(i=0;i<len;i++)
{
if(a[i].score>maxScore.score)
{
maxScore=a[i];
}
}
printf("最高:%s %d\n",maxScore.name,maxScore.score);
for(i=0;i<len;i++)
{
if(a[i].score<minScore.score)
{
minScore=a[i];
}
}
printf("最低:%s %d\n",minScore.name,minScore.score);
return 0;
}