指针开辟空间的方法有问题
变量用错,current没有赋值就用在循环里了。
scanf读入时的后面是加指针,字符串名本来就是指针,不需要&符号。
冒泡排序方法有问题。
正确的代码如下:
#include
#include
#define N 100
int current;
typedef struct student
{
char *num;
char *nam;
float chinese;
float english;
float math;
double average;
float sum;
}STU;
STU stu[N]; //定义结构体数组
void bubbleSort(STU *arr, int n)
{
int i,j;
STU m;
for(i=0;i { for(j=0;j { if(arr[j].sum < arr[j+1].sum) { m=arr[j]; arr[j]=arr[j+1]; arr[j+1]=m; } } } return; } int main(){ int i,t; printf("请输入学生人数 :\n"); scanf("%d",&t); for(i=0; i printf("请输入学生的学号:\n"); stu[i].num = (char *)malloc(sizeof(char)*10); scanf("%s",stu[i].num); printf("请输入学生的姓名:\n"); stu[i].nam = (char *)malloc(sizeof(char)*10); scanf("%s",stu[i].nam); printf("请输入学生的语文成绩:\n"); scanf("%f",&stu[i].chinese); printf("请输入学生的数学成绩:\n"); scanf("%f",&stu[i].math); printf("请输入学生的英语成绩:\n"); scanf("%f",&stu[i].english); //输出每个学生的平均成绩 stu[i].average=(stu[i].chinese + stu[i].math + stu[i].english)/3.0; printf("学生%s的平均成绩为:%.2f\n",stu[i].nam,stu[i].average); //输出每个学生的总成绩 stu[i].sum=(stu[i].chinese + stu[i].math + stu[i].english); printf("学生%s的总成绩为:%f\n",stu[i].nam,stu[i].sum); } //录入学生成绩 bubbleSort(stu, t); printf("按总分由高到低输出学生的信息为:\n"); for(i=0; i printf("学生姓名:%s 学生学号:%s 语文:%f 英语:%f 数学:%f 总分:%.2lf 平均分:%f\n ", stu[i].nam,stu[i].num,stu[i].chinese,stu[i].english,stu[i].math,stu[i].sum,stu[i].average); } for(i=0; i free(stu[i].num); free(stu[i].nam); } return 0; }
stu[n].num=malloc(10*sizeof(char));——错误,malloc返回void *型指针,必须在malloc前加强制转换操作变为与stu[n].num相兼容的类型。
stu[n].nam=malloc(5*sizeof(char));——错误,同上。
scanf("%d",¤t);——¤是啥东西?
成员变量的指针使用有问题。赋值时取的指针的地址。
后面打印时,打印的是指针,不是指针的所指的值
要把指针理解清楚了