Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有数组和结构的四分卫评级函数表现得很奇怪_C++_Arrays_Function_Loops_Struct - Fatal编程技术网

C++ 具有数组和结构的四分卫评级函数表现得很奇怪

C++ 具有数组和结构的四分卫评级函数表现得很奇怪,c++,arrays,function,loops,struct,C++,Arrays,Function,Loops,Struct,首先,我应该说明这是一项家庭作业,因此,虽然给出直接答案的问题会给我一个好分数,但我更希望知道为什么有些东西不起作用,以及为什么/如何用你的解决方案解决它 下面是这个函数的背景。我有一个包含以下信息的四分卫结构。共有十个游戏,它们都存储在struct及其数组中: struct QuarterBack{ string name; int completions[kNumGames]; int attempts[kNumGames]; int yards[kNumGa

首先,我应该说明这是一项家庭作业,因此,虽然给出直接答案的问题会给我一个好分数,但我更希望知道为什么有些东西不起作用,以及为什么/如何用你的解决方案解决它

下面是这个函数的背景。我有一个包含以下信息的四分卫结构。共有十个游戏,它们都存储在struct及其数组中:

struct QuarterBack{
    string name;
    int completions[kNumGames];
    int attempts[kNumGames];
    int yards[kNumGames];
    int touchdowns[kNumGames];
    int interceptions[kNumGames];
};
现在我解决这个问题的目标是使用存储在这些结构中的信息来计算NFL风格的传球评分。作为参考,维基百科提供了以下内容:


下面是我正在使用的代码。它有一些多余的括号,我试图用它来确保我的控制是正确的,但除此之外,我很困惑,为什么我得不到更正确的答案。在代码下面,我将发布一个示例文件和输出

/**
 * @brief printPasserRating prints the passer rating of all players
 * @param players is the array holding all the players
 */
void printPasserRating(QuarterBack *players, int numPlayers){
    for(int player = 0; player < numPlayers; player++){
        double passerRating = 0;

        int sumCompletions = 0, sumAttempts = 0, sumYards = 0,
                sumTouchdowns = 0, sumInterceptions = 0;


        for(int game = 0; game < kNumGames; game++){
            sumCompletions += players[player].completions[game];
            sumAttempts += players[player].attempts[game];
            sumYards += players[player].yards[game];
            sumTouchdowns += players[player].touchdowns[game];
            sumInterceptions += players[player].interceptions[game];
        }


        double a = 0, b = 0, c = 0, d = 0;
        double nums[4] = {a, b, c, d};


        nums[0] = static_cast<double>((sumCompletions / sumAttempts) - 0.3) * 5;
        nums[1] = static_cast<double>((sumYards / sumAttempts) - 3) * 0.25;
        nums[2] = static_cast<double>(sumTouchdowns / sumAttempts) * 20;
        nums[3] = 2.375 - (static_cast<double>(sumInterceptions / sumAttempts) * 25);


        for(int letter = 0; letter < 4; letter++){
            nums[letter] = mm(nums[letter]);
        }

        passerRating = (nums[0] + nums[1] + nums[2] + nums[3]) / 0.06;
        cout << players[player].name << "\t" << passerRating << endl;
    }

    showMenu(players, numPlayers);
}
这是函数给我的输出:


非常感谢您的帮助,如果您需要更多信息来帮助我,请随时发表评论和询问。此外,由于这是一项家庭作业,即使我犯了一个愚蠢的错误,也不要认为我是不称职的。我被告知Stack Overflow没有愚蠢的问题,我真的希望社区能够做到这一点


感谢高级版。

我认为问题出在这样的代码中:

static_cast<double>((sumCompletions / sumAttempts) - 0.3)
    nums[0] = (static_cast<double>(sumCompletions) / sumAttempts - 0.3) * 5.0;
    nums[1] = (static_cast<double>(sumYards) / sumAttempts - 3) * 0.25;
    nums[2] = (static_cast<double>(sumTouchdowns) / sumAttempts) * 20.0;
    nums[3] = 2.375 - (static_cast<double>(sumInterceptions) / sumAttempts) * 25.0;

希望这有帮助

此数学不太可能满足您的要求:

    nums[0] = static_cast<double>((sumCompletions / sumAttempts) - 0.3) * 5;
    nums[1] = static_cast<double>((sumYards / sumAttempts) - 3) * 0.25;
    nums[2] = static_cast<double>(sumTouchdowns / sumAttempts) * 20;
    nums[3] = 2.375 - (static_cast<double>(sumInterceptions / sumAttempts) * 25);
通过将divide中的一个术语转换为
double
,divide本身升级为
double


或者,您可以将所有这些变量声明为
double
,并完全避免强制转换。这将使代码更易于遵循。或者,只需将
summetrients
转换为
double
,因为这在所有四个除法中都很常见。

您希望输出结果是什么?@JoeZ,虽然我的老师没有给出测试用例的具体答案,但他给出了接近100的近似值。另外,我的最后两个答案不应该相同。只是一个提示:您可以使用std::acculate进行求和:
std::acculate(players[player]。完成,players[player]。完成+kNumGames,0)
。我还建议您更喜欢
std::vecotr
而不是数组。@MichaWiedenmann非常感谢您的建议。关于数组,由于这是一门编程入门课,我们还没有涉及向量,但我相信下学期我们会。甚至我的导师都说他不喜欢数组,但既然数组存在,他就必须教给我们。我犯这个错误太频繁了,而且总是错过它。谢谢你的提醒,我现在要试试。看来这解决了我的问题。非常感谢!虽然两个答案都是正确的,但乔兹先回答了,所以我要给他正确的答案。谢谢你的帮助!看到有帮助的用户做他们最擅长的事情总是很高兴的。@zherman-也许我错了,但我想我在他之前就回答了。:-)
    nums[0] = static_cast<double>((sumCompletions / sumAttempts) - 0.3) * 5;
    nums[1] = static_cast<double>((sumYards / sumAttempts) - 3) * 0.25;
    nums[2] = static_cast<double>(sumTouchdowns / sumAttempts) * 20;
    nums[3] = 2.375 - (static_cast<double>(sumInterceptions / sumAttempts) * 25);
    nums[0] = (static_cast<double>(sumCompletions) / sumAttempts - 0.3) * 5.0;
    nums[1] = (static_cast<double>(sumYards) / sumAttempts - 3) * 0.25;
    nums[2] = (static_cast<double>(sumTouchdowns) / sumAttempts) * 20.0;
    nums[3] = 2.375 - (static_cast<double>(sumInterceptions) / sumAttempts) * 25.0;