第一个点不对,大佬帮看看

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

qew12312 @ 2023-01-13 17:48:50

#include<iostream>
#include<cstring>
using namespace std;
struct a{
    char qw[1000];
    int b[3];
};
int main()
    {double sum,sum1=0;int n,t,we,as;
    cin>>n;
    a er[n];
    for(t=0;t<n;t++){sum=0;
        cin>>er[t].qw;//为什么这里用cin.getline就只能输入一次?
        for(we=0;we<3;we++){
        cin>>er[t].b[we];
        sum+=er[t].b[we];//输入
        }if(sum>sum1)
        {sum1=sum;as=t;
        }//判断总分大小
    }
    cout<<er[as].qw<<" ";
        for(we=0;we<3;we++){if(we==2) 
            cout<<er[as].b[we];
        else cout<<er[as].b[we]<<" ";
        }//输出

return 0;
}

by guozhetao @ 2023-01-13 18:01:09

@qew12312

#include<iostream>
#include<cstring>
using namespace std;
struct a{
    char qw[1000];
    int b[3];
};
int main() {
    double sum,sum1=0;int n,t,we,as;
    cin>>n;
    a er[1005];
    for(t=0;t<n;t++){
        sum=0;
        cin>>er[t].qw;//为什么这里用cin.getline就只能输入一次?
        for(we=0;we<3;we++){
            cin>>er[t].b[we];
            sum+=er[t].b[we];//输入
        }
        if(sum>sum1) {
            sum1=sum;as=t;
        }//判断总分大小
    }
    cout<<er[as].qw<<" ";
    for(we=0;we<3;we++){
        cout<<er[as].b[we]<<" ";
    }//输出

return 0;
}

by guozhetao @ 2023-01-13 18:01:48

@qew12312 遇到 RE 就开大一点


by Cindy_Li @ 2023-01-13 18:05:53

楼上正解


by Cindy_Li @ 2023-01-13 18:19:39

@qew12312

为什么这里用cin.getline就只能输入一次?

因为getline是忽略空格读入整行作为一个字符串,而cin>>er[t].qw默认以空格作为分界点

在这道题里会把第一行( n 后面的多余空格和换行)作为一个字符串读入。

在执行读入分数的时候会读入第二行的名字,而这是不符合int格式的,所以会直接终止读入。

输出的 3 个数因为定义在main函数里,是初始随机给的


by Cindy_Li @ 2023-01-13 18:30:33

@qew12312 一点建议

  1. 变量定义到全局(尤其数组),这时所有变量初始值为0

  2. 慎用double,运算中只会出现整数就不用

  3. 把数组空间开够,一般会多开 5 ~ 50

例子:

   #include<iostream>
   #include<cstring>
   using namespace std;
   struct a{
    string qw;
    int b[5];
   }er[1005];
   int sum,sum1;
   int n,t,we,as;
   int main(){
        return 0;
    }

by qew12312 @ 2023-01-13 20:32:02

@xinyulicindy0608 改了,对了,但想不清结构体数组为什么要开大一点,它不是默认是int类型吗


by Cindy_Li @ 2023-01-13 21:06:46

@qew12312 怎么说呢,按理说你的代码不应该RE,我本地测第一个测试点也没问题

数组开大一点是习惯,反正大一点点对空间影响可以忽略,谨慎一点避免出错(尤其像我喜欢下标从1开始

PS:突然想起教练说过函数内开数组空间限制特别小,可能是这个问题

以后尽量数组开全局,不要在主函数里定义


|