C++全WA,求帮助

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

错误信息全部是 Too short on line 1
by xhz0311 @ 2022-12-05 18:42:52


@[xhz0311](/user/747883) 别急,给我看看,首先我感觉你名字还是用string类型吧,名字不是全是8个字符的
by register_new @ 2022-12-05 18:51:24


@[xhz0311](/user/747883) 你的排序在哪里?
by register_new @ 2022-12-05 18:52:58


@[xhz0311](/user/747883) 先要排序才输出啊,你检查一下你自己的思路
by register_new @ 2022-12-05 18:53:33


@[xhz0311](/user/747883) ## 优化方面: 建议先自学 c++ string用法。 做此题 用string的话 从 ``` for (int j=0; j<8; j++) { scanf("%c",&m.name[j]); if (int (m.name[j])==32) { break; } } ``` 能变到: ``` cin>>m.name ``` 同时: ``` char name[8]; ``` 改成 ``` string name ``` 这样能为你省去不少麻烦 但c++记得用万能头: ``` #include<bits/stdc++.h> ``` ## 错误方面: ``` #include<bits/stdc++.h> using namespace std; struct stu{ char name[8]; int yw; int sx; int yy; int sum; }; int main() { int k; scanf("%d",&k); struct stu m,n; for (int j=0; j<8; j++) { scanf("%c",&m.name[j]); if (int (m.name[j])==32) { break; } } scanf("%d",&m.yw); scanf("%d",&m.sx); scanf("%d",&m.yy); m.sum=m.yw+m.sx+m.yy; for (int i=1; i<k; i++) { for (int j=0; j<8; j++) { scanf("%c",&n.name[j]); if (n.name[j]==32) { break; } } scanf("%d",&n.yw); scanf("%d",&n.sx); scanf("%d",&n.yy); n.sum=n.yw+n.sx+n.yy; if (n.sum > m.sum) { m=n; }//应放到循环中 } for (int i=0; i<=7; i++) { if (m.name[i]==' ') { break; } printf("%c",m.name[i]); } printf(" %d %d %d",m.yw, m.sx,m.yy); return 0; } ```
by _Virgo_ @ 2022-12-05 18:53:52


~~我之前用排序,样例都过不了~~ 是参考的一篇题解中的思路 “看了看其他大佬好像都用了STL。对新人很是友好,我的思路比较简单,应该完全是看得懂的。 我是在输入期间就直接判断总分大小,因此第一个学生的信息是单独输入的。而接下来输入的信息用的是 另一组变量。形象一点解释,就好比一个打擂赛。第一位选手直接成为擂主(单独输入)。”
by xhz0311 @ 2022-12-05 18:55:07


@[_Virgo_](/user/571589) 两方面结合起来
by _Virgo_ @ 2022-12-05 18:55:27


@[xhz0311](/user/747883) 代码高亮中没string份。 你不会用 cout/cin吗?
by _Virgo_ @ 2022-12-05 19:18:59


@[_Virgo_](/user/571589) emmmmmm 改成这样还是不行 ```cpp #include <cstdio> #include <string> using namespace std; struct stu{ string name; int yw; int sx; int yy; int sum; }; int main() { int k; scanf("%d",&k); struct stu m,n; scanf("%s %d %d %d",&m.name,&m.yw,&m.sx,&m.yy); m.sum=m.yw+m.sx+m.yy; for (int i=1; i<k; i++) { scanf("%s %d %d %d",&n.name,&n.yw,&n.sx,&n.yy); n.sum=n.yw+n.sx+n.yy; } if (n.sum > m.sum) { m=n; } printf("%s %d %d %d",m.name,m.yw, m.sx,m.yy); return 0; } ``` 全RE了。。。 Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.
by xhz0311 @ 2022-12-05 19:21:09


@[xhz0311](/user/747883) 思路混乱啊,char可以不改,直接cin不要循环,然后写了结构体就写自定义排序sort即可
by __er @ 2022-12-05 19:26:10


| 下一页