该程序采用用户输入的一些基本棒球统计数据,并执行一些操作,最终输出复杂的统计数据。虽然我们刚刚开始学习函数,但我首先尝试用函数执行此程序,但是失败了。我认为该程序可以在没有函数的情况下执行,到目前为止这是我的代码:
(发布系统拒绝让我在#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.
答案 0 :(得分: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;
}
答案 1 :(得分:0)
这一行
WIN = (EqR * EqR) / ((EqR * EqR) + (RA * RA));
您的变量RA
永远不会被初始化。在这种情况下,它可能默认初始化为零。在这种情况下,这将导致
WIN = 1
所以当你这样做时
aWIN = (WIN / (1 - WIN));
所以你要做一个零点的浮点除法,这会导致无穷大。我不确定什么叫pow
关于无效,但我猜它不好。我不知道你的变量代表什么,但是
RA = 0
所以将它初始化为某个东西或捕获用户输入值是个好主意。我强烈建议使用调试器检查程序运行时是否正确设置/计算变量。
另请注意,您通过整数除法得到零 - 您设置
LGRS = 21017;
LGPA = 184179;
然后在这一行
EqR = (2 * REqA / LGEqA - 1) * (AB + BB + HBP) * (LGRS / LGPA);
的结果
(LGRS / LGPA)
从LGRS < LGPA
起始终等于零。 2个整数类型的除法结果不出所料是一个整数,当分子和分母都是正数,但分子小于分母时,结果将为零(在此网站上研究整数除法或一般的网络)。因此,您的产品包含零项,因此EqR == 0