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

2024-11-16 16:50:21
推荐回答(3个)
回答1:

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

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

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

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

正确的代码如下:

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

}

回答2:

  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);——¤是啥东西?

回答3:

成员变量的指针使用有问题。赋值时取的指针的地址。
后面打印时,打印的是指针,不是指针的所指的值
要把指针理解清楚了