Matrix_zero @ 2021-12-17 21:47:01
代码如下:
#include<stdio.h>
typedef struct t{
char name[8];
int score[3];
int sum;
}standard;
void get(standard* a,int n){
int i=0;
standard* p=a;
for(;p<a+n;p++){
scanf("%s%d%d%d",&(p->name),&(p->score[0]),&(p->score[1]),&(p->score[2]));
(*p).sum=(*p).score[0]+(*p).score[1]+(*p).score[2];
}}
void sort(standard* a,int n){
standard temp;
standard* p=a+1;
for(p=a+1;p<a+n;p++)
if((p->sum<=(p-1)->sum)){
temp=*(p-1);
*(p-1)=*p;
*p=temp;
}
}
int main(){
int n;
scanf("%d",&n);
standard a[n];
get (a,n);
sort(a,n);
printf("%s %d %d %d",a[n-1].name,a[n-1].score[0],a[n-1].score[1],a[n-1].score[2]);
return 0;
}
by ud2_ @ 2021-12-17 21:51:10
如果名字恰好 8 个字符,那么 name
越界。
建议把所有 (*p).
改成 p->
。这两种写法行为完全相同,但后者少一对括号。
by 君と僕のNOIP @ 2021-12-17 21:53:12
珍爱生命,远离指针
by Matrix_zero @ 2021-12-17 21:55:46
@ud2_ 啊为什么会越界呢 题目不是说姓名(不超过 8 个字符的仅有英文小写字母的字符串) 我好菜)救命)
by ud2_ @ 2021-12-17 21:56:30
@君と僕のNOIP C++ 是要远离裸指针。C 也这样做太难了。
by Matrix_zero @ 2021-12-17 21:57:19
@ud2_ 等等我忘记\0了,谢谢您!!!