C++全WA,求帮助

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

xhz0311 @ 2022-12-05 18:41:47

求帮助,可以过样例,但全WA

#include <cstdio>
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 xhz0311 @ 2022-12-05 18:42:52

错误信息全部是 Too short on line 1


by register_new @ 2022-12-05 18:51:24

@xhz0311 别急,给我看看,首先我感觉你名字还是用string类型吧,名字不是全是8个字符的


by register_new @ 2022-12-05 18:52:58

@xhz0311 你的排序在哪里?


by register_new @ 2022-12-05 18:53:33

@xhz0311 先要排序才输出啊,你检查一下你自己的思路


by _Virgo_ @ 2022-12-05 18:53:52

@xhz0311

优化方面:

建议先自学 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 xhz0311 @ 2022-12-05 18:55:07

我之前用排序,样例都过不了

是参考的一篇题解中的思路

“看了看其他大佬好像都用了STL。对新人很是友好,我的思路比较简单,应该完全是看得懂的。 我是在输入期间就直接判断总分大小,因此第一个学生的信息是单独输入的。而接下来输入的信息用的是 另一组变量。形象一点解释,就好比一个打擂赛。第一位选手直接成为擂主(单独输入)。”


by _Virgo_ @ 2022-12-05 18:55:27

@Virgo 两方面结合起来


by _Virgo_ @ 2022-12-05 19:18:59

@xhz0311 代码高亮中没string份。

你不会用 cout/cin吗?


by xhz0311 @ 2022-12-05 19:21:09

@Virgo

emmmmmm 改成这样还是不行

#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 __er @ 2022-12-05 19:26:10

@xhz0311 思路混乱啊,char可以不改,直接cin不要循环,然后写了结构体就写自定义排序sort即可


| 下一页