标准偏差代码输出错误

时间:2014-10-16 00:05:43

标签: visual-c++

我无法看到我编写的代码中的输出。我试图从文件中计算一组数字的均值和标准差。我很遗憾问题是什么,我不知道我的代码是否正确,直到我能看到输出。这就是我到目前为止所拥有的:

#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;
}

1 个答案:

答案 0 :(得分:0)

运行代码后,我发现了一些错误。您可能没有得到任何输出,因为程序第一次通过行上的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这样的调试工具来帮助抓住这样的东西。