#代码编译后是能运行的,case 1能正常跑,但是case 2跑出来显示的数据是错误的,好像前年的参数没传递到,但是我检查了也没有问题

#代码编译后是能运行的,case 1能正常跑,但是case 2跑出来显示的数据是错误的,好像前年的参数没传递到,但是我检查了也没有问题

去掉第18行,第29行和第38行里面的取址符即可。
修改如下:
参考链接:
https://blog.csdn.net/2301_82248162/article/details/147671927
https://www.cnblogs.com/mjios/archive/2013/03/14/2960199.html
#include <stdio.h>
#include <string.h>
double average(float math_score, float english_score, float chinese_score);
struct student{
char name[10];
int number;
float math_score;
float english_score;
float chinese_score;
};
int main(void){
struct student arr[3];
double ave;
printf("Enter students message:\n");
for(int a=0; a<3; a++){
scanf("%s%d%f%f%f",
arr[a].name, // 读取姓名字符串,这里的取址符&可以去除
&arr[a].number,
&arr[a].math_score,
&arr[a].english_score,
&arr[a].chinese_score);
};
int choice;
printf("请选择以下操作:\n1.计算平均分\n2.查找学生成绩\n");
scanf("%d", &choice);
switch(choice){
case 1:{
for(int i=0; i<3; i++){
ave=average(arr[i].math_score, arr[i].english_score, arr[i].chinese_score);
printf("the average score of %s if %.1f\n", arr[i].name, ave); // arr[i].name前面的取址符&可以去除
}
}
break;
case 2:{
char na[10];
printf("Type the student name:");
scanf("%s", na);
for(int b=0; b<3; b++){
if(strcmp(arr[b].name, na)==0){
// https://blog.csdn.net/2301_82248162/article/details/147671927
// https://www.cnblogs.com/mjios/archive/2013/03/14/2960199.html
// 下面printf()语句里的取址符全部去除,因为是打印变量里的值,不是打印它们的地址
printf("%s's number is %d,math score is %.1f,english score is %.1f,chinese score is %.1f",
na, arr[b].number, arr[b].math_score, arr[b].english_score, arr[b].chinese_score);
}
}
}
break;
}
}
double average(float math_score, float english_score, float chinese_score){
return (math_score+english_score+chinese_score)/3;
}
