0

该程序接受用户输入的一些基本棒球统计数据,并执行一些操作,最终输出一个复杂的统计数据。虽然我们才刚开始学习函数,但我第一次尝试用函数做这个程序,失败得很惨。我认为该程序可以在没有功能的情况下执行,到目前为止,这是我的代码:

(发布系统拒绝让我在 #include < 之后输入任何内容,但我使用的是 iostream、iomanip、conio.h 和 cmath。)

using namespace std;   

int main()   

{   
    int H, TB, BB, HBP, AB, YEAR, LGRS, LGPA;   
    double REqA, EqR, RA, WIN, AEqA, LGEqA, aWIN;   

    cout << "Enter the player's at bats." << endl;   
    cin >> AB;   

    cout << "Enter the player's hits." << endl;   
    cin >> H;   

    cout << "Enter the player's total bases." << endl;   
    cin >> TB;   

    cout << "Enter the player's walks." << endl;   
    cin >> BB;   

    cout << "Enter the player's times hit by pitch." << endl;   
    cin >> HBP;   

    cout << "Enter the year the player played." << endl;   
    cin >> YEAR;   

    if (YEAR != 2012)   
    {   
       cout << "Sorry, this program only supports the 2012 season." << endl;   
    }   

    else  

    {   
       LGRS = 21017;   
       LGPA = 184179;   
       LGEqA = 0.72401;   

    }      

    REqA = (H + TB + (1.5 * (BB + HBP))) / (AB + BB + HBP);   

    EqR = (2 * REqA / LGEqA - 1) * (AB + BB + HBP) * (LGRS / LGPA);   

    WIN = (EqR * EqR) / ((EqR * EqR) + (RA * RA));   

    aWIN = (WIN / (1 - WIN));   

    AEqA = pow(aWIN, 0.2) * 0.26;   

    cout << "The player had a " << AEqA << " EqA in " << YEAR << "." << endl;   

    getch();   

    return 0;   

}  

AEqA 的最终输出始终为 0,无论一开始输入什么数字。如果我将程序设置为输出 REqA,则程序正在输出它应该输出的数字。但是我需要为 AEqA 的最终输出执行之后的所有步骤,并且最终结果总是为零。我认为问题在于计算 EqR 的行,因为如果我设置程序输出 EqR,输出也始终为 0。

4

2 回答 2

0

使用 getline 进行用户输入会是更好的做法

#include <iostream>
#include <string>
using namespace std;

int main ()
{

  int H, TB, BB, HBP, AB, YEAR, LGRS, LGPA;   
  double REqA, EqR, RA, WIN, AEqA, LGEqA, aWIN; 

  cout << "Enter the player's at bats.? " << endl;
  getline (cin, AB);

  //etc ...

   return 0;

}

于 2012-11-08T22:44:15.017 回答
0

这条线

 WIN = (EqR * EqR) / ((EqR * EqR) + (RA * RA));

你的变量RA永远不会被初始化。在这种情况下,它可能默认初始化为零。在这种情况下,这将导致

WIN = 1 

所以当你这样做时

aWIN = (WIN / (1 - WIN));  

所以你正在做一个浮点除以零,这应该导致无穷大。我不确定调用powinfinity 有什么作用,但我猜它不好。我不知道你的变量代表什么,但你总是会遇到这个问题

RA = 0

所以将它初始化为某些东西或捕获用户输入值是个好主意。我强烈建议使用调试器来检查您的变量在程序运行时是否被正确设置/计算。

另请注意,您在这里通过整数除法得到零 - 您设置

LGRS = 21017;   
LGPA = 184179; 

然后在这条线上

EqR = (2 * REqA / LGEqA - 1) * (AB + BB + HBP) * (LGRS / LGPA);   

的结果

(LGRS / LGPA)

始终等于零,因为LGRS < LGPA. 两种整数类型的除法结果毫无疑问是整数,当分子和分母都是正数,但分子小于分母时,结果将为零(在本网站或一般网络上研究整数除法)。因此,您的产品包含零项,因此EqR == 0

于 2012-11-08T22:49:45.610 回答