我有这个程序,我觉得我最终使我的代码正确,但我的输出永远不会打印我的星号。我的一个伙伴告诉我通过另一个编译器运行它。我使用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;
}
答案 0 :(得分:4)
您似乎假设堆栈/堆上的自动变量初始化为0,而不是。例如。 int* bins = new int[10];
为您提供了一个包含10个未初始化整数的数组,这些整数可以具有任何值,这可以解释为什么它适用于一个编译器而另一个没有。
因此,您的histo
函数可能会返回带有垃圾的数组。例如-1,-1337,......