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

C++ Visual Studio Won't fully run program

本文关键字:运行 程序 Visual Studio C++      更新时间:2023-10-16

我有这个程序,我觉得我终于使我的代码正确了,但是我的输出永远不会打印出我的星号。我的一个伙伴告诉我,要通过另一个编译器运行它。我使用了jdoodle,我的代码正常工作。无论如何,我都无法在Visual Studio中正确运行。我更新了所有内容。有人有任何建议吗?我将留在这里,很想知道它在Elses 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;
}

您似乎假设堆栈/堆上的自动变量初始化为0,它们不是。例如。int* bins = new int[10];为您提供了10个可能具有任何价值的非专业整数的数组,这可以解释为什么它与一个编译器一起使用,而另一个编译器则不适用。

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