Visual c++ 标准偏差代码输出错误
我无法从我编写的代码中看到我的输出。我试图计算文件中一组数字的平均值和标准偏差。我不知道问题是什么,在看到输出之前,我不知道我的代码是否正确。以下是我目前掌握的情况:Visual c++ 标准偏差代码输出错误,visual-c++,Visual C++,我无法从我编写的代码中看到我的输出。我试图计算文件中一组数字的平均值和标准偏差。我不知道问题是什么,在看到输出之前,我不知道我的代码是否正确。以下是我目前掌握的情况: #include <iostream> #include <cmath> #include <fstream> using namespace std; int main() { // Declare Variables int n; int xi; int s
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
// Declare Variables
int n;
int xi;
int sdv;
int sum;
int sum2;
int sum3;
int mean;
// Declare and open input files
ifstream inData;
inData.open("score.dat");
if (!inData) // Incorrect Files
{
cout << "Cannot open input file." << endl;
return 1;
}
// Initialize variables and output
inData >> xi;
n = 0;
sum = 0;
sum3 = 0;
sdv = 0;
mean = 0;
while (inData)
{
sum += xi;
sum2 = sum * sum;
sum3 += (xi * xi);
mean = sum / n;
sdv = (sum3 - sum2) / (n * (n - 1));
inData >> xi;
}
// Print commands
cout << "The Standard Deviation of the Tests is:" << sdv << endl;
cout << "The Mean of the Tests is: " << mean << endl;
inData.close();
system("pause");
return 0;
}
运行代码后,我发现了一些bug。您可能无法获得任何输出,因为程序在第一次通过该行的while循环时崩溃:
mean = sum / n;
由于被零除的错误。
另一个错误是没有增加循环中n的增量值,所以总是只有一个数字
在循环的开头添加一个n++将解决这个问题
while (inData)
{
n++;
sum += xi;
...
但当n==1时,sdv上仍然会有一个除以零的结果:
sdv = (sum3 - sum2) / (1 * (1 - 1));
如果在分割之前添加条件,则该条件将起作用:
if (n >= 2)
sdv = (sum3 - sum2) / (n * (n - 1));
查看gdb之类的调试工具,以帮助捕获类似的内容。我怀疑代码采用了“无法打开输入文件”分支。在这里,您不需要调用systempause;在终止之前。我能让你看看其余的代码吗?我得到的sdv和meann的号码都是错误的,都初始化为0,并且从未更新过。另外,您可能希望将mean和sdv声明为double,而不是int。然后,domean=doublesum/n;。阅读你喜欢的C++教科书中的整数除法。我试过你建议的,而在之前试图找出它,这似乎不起作用。输出结果显示means和sdv都是0。这是另一个bug。你用什么来编译这段代码?在第一次迭代中还有另一个被零除的过程:当n==1,n-1==0,sdv==0时,你必须设置一个条件来确保n>=2。同样,我没有检查你的数学,但是平均值和标准偏差可能不是整数。。。您必须使用float或double类型才能正确计算。在数学公式中混合浮点数和整数会变得很棘手。。。祝你好运