数组搞砸了C ++

时间:2015-07-05 14:31:31

标签: c++ arrays

const int N = 5;

int person[] = {2, 3, 12, 5, 19};
int big = 0;
int small = 100;
int i;

for (i = 0; i <= N; i++)
{
    cout << "Person[" << i << "] ate: " << person[i] << endl;
    //cin >> person[i];

    for (int j = i+1; j <= N; j++)
    {
        if (person[i] < person[j])
        {
            int tmp = person[i];
            person[i] = person[j];
            person[j] = tmp;
        }
    }
            if (person[i]>big)
        big=person[i];
    if (person[i]<small)
        small=person[i];
}
    cout << "Person[" << i << "] ate the most pancakes: " << big << endl;
    cout << "Person[" << i << "] ate the least pancakes: " << small << endl;

    cout << "Sorted:" << endl;
    for (i = 0; i < N; i++)
    {
        cout << "Person[" << i << "]: " << person[i] << endl;
    }




    system("pause");

output

我弄乱了那些数组,它一直向我显示2但气泡分类工作。另一个问题是如何从最小值获取数组索引,从最高值获取数组索引?

2 个答案:

答案 0 :(得分:1)

数组索引从零开始,因此如果有N个元素,则最后一个元素将位于N-1索引处。索引N处的访问元素超出范围。

for (i = 0; i <= N; i++)//should run till `N-1` 
              ^^^

for (int j = i+1; j <= N; j++)//should run till `N-1`
                     ^^^

如果你想要最高和最低元素的索引,因为你已经对数组进行了排序,最小值的索引将是0,最高值的索引将是{{1 (在你的情况下相反,因为你按降序排列了数组)

答案 1 :(得分:1)

在C ++中,数组 ZERO 0 indexed。所以你应该改变你的for循环:

for (i = 0; i < N; i++)
             ^^^
{
    // some code...
    for (int j = i+1; j < N; j++)
                       ^^^
    {
        // some code...

由于:

index    -> 0  1  2   3  4 
person[] = {2, 3, 12, 5, 19};

在您的代码中,ij的值将增加到N 5。这意味着您正在尝试访问名为person的第5个索引的数组,这将创建数组索引超出范围的错误。