改好了,能运行了,但不明白为何
&(*p[i]).b 不行,要写成 &(*p)[i].b 呢?
&(*p[i]).b 不行,要写成 &(*p)[i].b 呢?
老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
# include <stdio.h> # include <malloc.h> //函数前置声明 void InputStudent(struct Student * p, int len); void OutputStudent(struct Student * p, int len); void Sort(struct Student * p, int len); //结构体,构建学生结构体 struct Student { int a; float b; char c[10]; }; //主函数 int main(void) { struct Student * p; int len; printf("请输入学生的人数:"); scanf("%d", &len); p = (struct Student *) malloc (len * sizeof(struct Student)); //输入 InputStudent(p, len); //冒泡排序 Sort(p, len); //输出 OutputStudent(p, len); return 0; } //输入函数 void InputStudent(struct Student * p, int len) { int i; for(i=0; i<len; i++) { printf("请输入第 %d 个学生的信息:\n", i+1); printf("年龄:"); scanf("%d", &p[i].a); printf("成绩:"); scanf("%f", &p[i].b); printf("姓名:"); scanf("%s", p[i].c); } return; } //输出函数 void OutputStudent(struct Student * p, int len) { int i; printf("\n\n学生信息如下:\n"); for(i=0; i<len; i++) { printf("第 %d 个学生的信息:\n", i+1); printf("年龄: %d ", p[i].a); printf("成绩: %f ", p[i].b); printf("姓名: %s \n", p[i].c); } return; } //冒泡排序函数 void Sort(struct Student * p, int len) { int i, j; struct Student t; for(i=0; i<len-1; i++) { for(j=0; j<len-1-i; j++) { if(p[j].b < p[j+1].b) { t = p[j]; p[j] = p[j+1]; p[j+1] = t; } } } }