C ++ Visual Studio无法完全运行程序

时间:2018-02-23 05:54:04

标签: c++ visual-studio visual-c++

我有这个程序,我觉得我最终使我的代码正确,但我的输出永远不会打印我的星号。我的一个伙伴告诉我通过另一个编译器运行它。我使用JDoodle,我的代码完美无缺。无论如何,我无法让它在Visual Studio中正常运行。我更新了它和一切。任何人都有任何建议吗?我将我的代码留在这里,并且很想知道它是否在Visual Studio中出现问题,或者我的编译器有问题。提前谢谢。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int* histo(int* scores, int count);
double dev(int count, int* scores);
double mean(int count, int* scores);

int main()
{
    int scores[101];
    int count = 0;

    cout << "Enter a score (-1 to stop): ";

    do
    {
        cin >> scores[count++];
    } while (scores[count - 1] != -1);
    count--;

    int* bins = histo(scores, count);

    for (int i = 9; i >= 0; i--)
    {
        cout << i << "| ";

        for (int j = 0; j < bins[i]; j++)
        {
            cout << "*";
        }
        cout << endl;
    }

    delete[] bins;

    cout << "mean: " << mean(count, scores) << endl;
    cout << "dev: " << dev(count, scores) << endl;  
    system("pause");
    return 0;
}

int* histo(int* scores, int count)
{
    int* bins = new int[10];

    for (int i = 0; i < count; i++)
    {
        if (scores[i] < 10)
        {
            bins[0]++;
        }
        else if (scores[i] >= 10 && scores[i] < 20)
        {
            bins[1]++;
        }
        else if (scores[i] >= 20 && scores[i] < 30)
        {
            bins[2]++;
        }
        else if (scores[i] >= 30 && scores[i] < 40)
        {
            bins[3]++;
        }
        else if (scores[i] >= 40 && scores[i] < 50)
        {
            bins[4]++;
        }
        else if (scores[i] >= 50 && scores[i] < 60)
        {
            bins[5]++;
        }
        else if (scores[i] >= 60 && scores[i] < 70)
        {
            bins[6]++;
        }
        else if (scores[i] >= 70 && scores[i] < 80)
        {
            bins[7]++;
        }
        else if (scores[i] >= 80 && scores[i] < 90)
        {
            bins[8]++;
        }
        else if (scores[i] >= 90)
        {
            bins[9]++;
        }
    }
    return bins;
}

double dev(int count, int* scores)
{
    double x = 0;
    double y = 0;
    double std_dev = 0;
    double mean_t;

    mean_t = mean(count, scores);

    for (int i = 0; i < count; i++)
    {
        x = pow(scores[i] - mean_t, 2);
        y += x;
    }
    std_dev = sqrt(y / count);
    return std_dev;
}
double mean(int count, int* scores)
{
    double total = 0;

    for (int i = 0; i < count; i++)
    {
        total += scores[i];
    }

    return total / count;
}

1 个答案:

答案 0 :(得分:4)

您似乎假设堆栈/堆上的自动变量初始化为0,而不是。例如。 int* bins = new int[10];为您提供了一个包含10个未初始化整数的数组,这些整数可以具有任何值,这可以解释为什么它适用于一个编译器而另一个没有。

因此,您的histo函数可能会返回带有垃圾的数组。例如-1,-1337,......