typedef struct student { char name[16]; double scoreC; double scoreM; }STU; STU* scan(STU* arr12, int n) { int i; arr12=(STU *)malloc(n*sizeof(STU)); for(i=0;i<n;i++) { scanf("%s",arr12[i].name); scanf("%lf,%lf",&arr12[i].scoreC,&arr12[i].scoreM); } return arr12; } int findMax(STU* arr, int n) { int i,k=0; for(i=1;i<5;i++) if(arr12[k].scoreC<arr12[i].scoreC) k=i; return k; } int main(void) { STU * arr0529;//STU arr12[5]; int max; int n; scanf("%d",&n); arr0529=scan(arr, n); max = findMax(arr,5); }
时间: 2024-01-16 10:03:09 浏览: 53
这段代码中有一些问题,第一个问题是在函数scan中,arr12指针是作为参数传递的,函数内部对其进行了动态内存的分配,但是没有返回分配后的指针,也没有把分配后的指针赋值给传入的arr12指针,导致在main函数中使用这个指针时会出现错误。可以修改为如下代码:
```c
STU* scan(int n) {
int i;
STU* arr12 = (STU*)malloc(n * sizeof(STU));
for (i = 0; i < n; i++)
{
scanf("%s", arr12[i].name);
scanf("%lf,%lf", &arr12[i].scoreC, &arr12[i].scoreM);
}
return arr12;
}
int main(void) {
STU* arr0529;
int max;
int n;
scanf("%d", &n);
arr0529 = scan(n);
max = findMax(arr0529, n);
// ...
}
```
第二个问题是在函数findMax中,应该使用参数n代替数字5,因为传入的数组长度可能不是5。可以修改为如下代码:
```c
int findMax(STU* arr, int n) {
int i, k = 0;
for (i = 1; i < n; i++)
if (arr[k].scoreC < arr[i].scoreC)
k = i;
return k;
}
```
阅读全文