这份代码有什么问题在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> #define N 5 typedef struct { int id; char name[20]; int math; int chinese; double aver; }STU; void InputData(STU *p,int num); STU *FindMaxIndex(STU *p,int num); int main(void) { STU classone[N]; STU *pmax; InputData(classone,N); pmax=FindMaxIndex(classone,N); printf("maxinfo:%d %s %d %d %.1f\n",pmax->id,pmax->name,pmax->math,pmax->chinese,pmax->aver); return 0; } /* 请在这里填写答案 */void InputData(STU *p,int num) { int n = num; for (STU *s = p; s < p + n; ++s) { scanf ("%d", &s->id); scanf_s("%s", &s->name,20); scanf("%d",&s->math); scanf("%d",&s->chinese); p->aver = 1.0 * ( p->math + p-> chinese) / 2; } } STU *FindMaxIndex(STU *p,int num) { STU *ans; for (STU *s = p; s < p + num; ++s) { if (s->aver > ans -> aver) ans = s; } return ans; }
时间: 2024-04-29 16:20:29 浏览: 251
这份代码有两个问题:
1. 在输入字符串时,使用了 scanf_s 函数,但是这个函数是 Microsoft Visual Studio 特有的函数,不具有跨平台性。应该改成 scanf 函数。
2. 在计算平均分时,错误地使用了指针变量 p 而不是当前的结构体指针 s。应该改成 s->aver = 1.0 * ( s->math + s->chinese) / 2;
下面是修改后的代码:
#include <stdio.h>
#define N 5
typedef struct {
int id;
char name[20];
int math;
int chinese;
double aver;
}STU;
void InputData(STU *p,int num);
STU *FindMaxIndex(STU *p,int num);
int main(void) {
STU classone[N];
STU *pmax;
InputData(classone,N);
pmax=FindMaxIndex(classone,N);
printf("maxinfo:%d %s %d %d %.1f\n",pmax->id,pmax->name,pmax->math,pmax->chinese,pmax->aver);
return 0;
}
void InputData(STU *p,int num) {
int n = num;
for (STU *s = p; s < p + n; ++s)
{
scanf ("%d", &s->id);
scanf("%s", &s->name);
scanf("%d",&s->math);
scanf("%d",&s->chinese);
s->aver = 1.0 * ( s->math + s->chinese) / 2;
}
}
STU *FindMaxIndex(STU *p,int num) {
STU *ans = p;
for (STU *s = p; s < p + num; ++s)
{
if (s->aver > ans -> aver) ans = s;
}
return ans;
}
阅读全文