C ++编程分配程序以信号6结束

时间:2016-02-25 19:51:40

标签: c++

这是作业: 编写一个程序,输出作业的学生成绩直方图。首先,程序将输入成绩数量并创建一个动态数组来存储成绩。然后,程序应将每个学生的成绩输入为整数,并将成绩存储在动态数组中。

程序应该扫描数组并计算直方图。在计算直方图时,等级的最小值为0,但您的程序应确定用户输入的最大值。使用动态数组存储直方图。将直方图输出到控制台。

例如,如果输入为:

输入成绩数: 6 输入成绩(每个都在新行上): 20 三十 4 20 三十 三十 然后输出直方图应为:

4 * 20 ** 30 ***

我的程序对我来说很好但是当我在网上提交它时它会告诉我"程序以信号6结束。"我不知道这是什么,我不知道我的程序是什么导致它。这是我的代码:

#include<iostream>
#include<iomanip>

using namespace std;

int main()
{
    int numGrades;
    int i,j;
    int max = 0;
    int *list, *hist;

    cout << "Enter number of grades:" << endl;
    cin >> numGrades;
    list = new int[numGrades];
    cout << "Enter grades (each on a new line):\n";

    for(i=0;i<numGrades;i++)
    {
        cin >> *(list+i);
    }

    for(i=0;i<numGrades;i++)
    {
        if(max<*(list+i))
            max = *(list+i);
    }

    hist = new int[max];

    for(i=0;i<=max;i++)
    {
        int no=0;
        for(int j=0;j<numGrades;j++)
        {
            if(i==*(list+j))
                no++;
        }
        *(hist+i)=no;
    }

    cout << "Histogram:" << endl;
    for(i=0;i<=max;i++)
    {
        if(*(hist+i)!=0)
        {
            cout << right << setw(3) << i << " ";
            for(j=0;j<*(hist+i);j++)
                cout << "*";
        }
        if(*(hist+i) != 0)
            cout << endl;
    }

    delete []hist;
    delete []list;

    return 0;
}

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

你写

hist = new int[max]; 

for(i=0;i<=max;i++)
*(hist+i)=no;

最后一个操作超出范围(数组的索引从0到最大-1)。