这道题不用结构体可以用指针完成吗

P5740 【深基7.例9】最厉害的学生

```c #include<stdio.h> //输入函数 void f(char ch[9],int *a,int *b,int *c){ int l; for(int i=0;i<8;i++){ ch[i]=getchar(); if (ch[i] == ' '){ l=i; break; } } ch[l]='\0'; scanf("%d %d %d",a,b,c); } int main(){ int a,b,c; char ch[9]; int n; int max=0; int a1,a2,a3; char ch1[9]; scanf("%d",&n); //计算最大 for (int i=0;i<n;i++){ f(ch,&a,&b,&c); int score=a+b+c; if(score>max){ max=score; a1=a; a2=b; a3=c; for (int j=0;j<9;j++){ ch1[j]=ch[j]; if(ch[j]=='\0') break; } } } //输出 for(int i=1;i<9&&ch1[i]!='\0';i++){ printf("%c",ch1[i]); } printf(" "); printf("%d %d %d",a1,a2,a3); return 0; } ``` 样例对,自己试了几个也对,但是提交都错了
by a13901280570 @ 2023-12-06 23:56:02


边输入边处理即可数组函数指针都不需要
by immortal_water @ 2023-12-07 06:59:58


定义几个记录最大学生数据的变量,然后一边读入一边判断新读入的学生是否比当前记录的最大学生更大,是就更换,否或者一样大都不变
by immortal_water @ 2023-12-07 07:04:06


@[a13901280570](/user/1070752) 有可能换行符又出锅了 1. 建议在 `ch[i]=getchar();` 后面加上 `if(!i) while(ch[i]=='\r'||ch[i]=='\n'||ch[i]==' ') ch[i]=getchar();` 避免换行符 2. 字符串可以用 `scanf("%s",ch);` 和 `printf("%s ",ch);`
by Bingxiu @ 2023-12-07 07:08:51


@[immortal_water](/user/275812) 他就是这么做的,不过自定义函数用来读入了而已 然鹅读入写错了(
by Bingxiu @ 2023-12-07 07:10:20


@[Bingxiu](/user/676498) 啊我以为他用的递归没细看(
by immortal_water @ 2023-12-07 08:47:51


@[Bingxiu](/user/676498) 用scanf函数就好了,但是getchar这个函数输入,用您说的改完以后,输入就有错误了,不太清楚哪里错了。 (除了第一个九百多个全零分的测试过不去,用scanf输入可以过后面九个测试点)
by a13901280570 @ 2023-12-12 18:23:27


@[a13901280570](/user/1070752) 把max=0改成max=-1就可以避免都是0这个问题了
by a13901280570 @ 2023-12-12 19:36:57


|