C语言程序,没有错误,但是运行不出来? 5

#include<stdio.h>#include<stdlib.h>#defineN100intcurrent;typedefstructstudent{char*nu... #include<stdio.h>
#include<stdlib.h>
#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]; //定义结构体数组

int main(){
int i,j,k,r,n,m,t;
int pass;
float hold,temp,temp1,temp4;
char *temp2;
char *temp3;
double temp5;

for(n=0;n<current;n++){
stu[n].num=malloc(10*sizeof(char));
stu[n].nam=malloc(5*sizeof(char));
}
//为结构体动态分配内存

printf("请输入学生人数 :\n");
scanf("%d",¤t);

for(i=0;i<current;i++){
printf("请输入学生的学号:\n");
scanf("%s",&stu[i].num);

printf("请输入学生的姓名:\n");
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);
} //录入学生成绩

for(j=0;j<current;j++){
stu[j].average=(stu[j].chinese+stu[j].math+stu[j].english)/3.0;
printf("学生%s的平均成绩为:%.2f\n",stu[j].nam,stu[j].average);
} //输出每个学生的平均成绩

for(k=0;k<current;k++){
stu[k].sum=(stu[k].chinese+stu[k].math+stu[k].english);
printf("学生%s的总成绩为:%f\n",stu[k].nam,stu[k].sum);
} //输出每个学生的总成绩

for(pass=0;pass<current;pass++){
for(t=0;t<current-1-pass;t++){
if(stu[t].sum<stu[t+1].sum){
hold = stu[t].chinese;
stu[t].chinese=stu[t+1].chinese;
stu[t+1].chinese=hold; // 语文

temp = stu[t].english;
stu[t].english=stu[t+1].english;
stu[t+1].english=temp; //英语

temp1 = stu[t].math;
stu[t].math=stu[t+1].math;
stu[t+1].math=temp1; //数学

temp2 = stu[t].num;
stu[t].nam = stu[t+1].nam;
stu[t+1].nam=temp2; //学号

temp3 = stu[t].nam;
stu[t].nam=stu[t+1].nam;
stu[t+1].nam=temp3; //姓名

temp4 = stu[t].sum;
stu[t].sum=stu[t+1].sum;
stu[t+1].sum=temp4; //总分

temp5 = stu[t].average;
stu[t].average=stu[t+1].average;
stu[t+1].average=temp5; //平均分
}
}
} //冒泡排序对总分由高到低排序

printf("按总分由高到低输出学生的信息为:\n");

for(r=0;r<current;r++){
printf("学生姓名:%s 学生学号:%s 语文:%f 英语:%f 数学:%f 总分:%.2lf 平均分:%f\n ",
stu[r].nam,stu[r].num,stu[r].chinese,stu[r].english,stu[r].math,stu[r].sum,stu[r].average);
}
for(m=0;m<current;m++){
free(stu[m].num);
free(stu[m].nam);
}
return 0;
}
展开
 我来答
IT圈新鲜事
2019-12-03 · 记录IT技术领域中的新鲜事
IT圈新鲜事
采纳数:1722 获赞数:11351

向TA提问 私信TA
展开全部
  1. 指针开辟空间的方法有问题

  2. 变量用错,current没有赋值就用在循环里了。

  3. scanf读入时的后面是加指针,字符串名本来就是指针,不需要&符号。

  4. 冒泡排序方法有问题。

正确的代码如下:

#include<stdio.h>

#include<stdlib.h>

#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<n-1;i++)

{

for(j=0;j<n-1-i;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<t; 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<t; 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<t; i++){

free(stu[i].num);

free(stu[i].nam);

}

return 0;

}

White_MouseYBZ
2019-12-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6646万
展开全部
  1. stu[n].num=malloc(10*sizeof(char));——错误,malloc返回void *型指针,必须在malloc前加强制转换操作变为与stu[n].num相兼容的类型。

  2. stu[n].nam=malloc(5*sizeof(char));——错误,同上。

  3. scanf("%d",¤t);——¤是啥东西?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哈哈哈dxwM
2019-12-03 · TA获得超过114个赞
知道小有建树答主
回答量:375
采纳率:72%
帮助的人:79.3万
展开全部
成员变量的指针使用有问题。赋值时取的指针的地址。
后面打印时,打印的是指针,不是指针的所指的值
要把指针理解清楚了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式