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

#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;
}

    指针开辟空间的方法有问题

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

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

    冒泡排序方法有问题。

正确的代码如下:

#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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-03

    stu[n].num=malloc(10*sizeof(char));——错误,malloc返回void *型指针,必须在malloc前加强制转换操作变为与stu[n].num相兼容的类型。

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

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

第2个回答  2019-12-03
成员变量的指针使用有问题。赋值时取的指针的地址。
后面打印时,打印的是指针,不是指针的所指的值
要把指针理解清楚了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网