#3 wa 其他能过,蒟蒻求助orz

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

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了,谢谢您!!!


|