首页 > 解决方案 > 这个数组值是从哪里来的?

问题描述

所以我在重新开始上课之前练习编码,我想创建一个由 10 个整数组成的随机数组,并想找出哪两个数字相加时大于 100。

当我运行下面的代码时

int arr[9];

for(int i = 0; i<=9; i++){
    arr[i]=(rand()%100)+1;
    cout<<arr[i]<<endl;
}

cout<<endl;

for(int k = 0; k<=9; k++){
    for (int j = k+1; j<=9; j++){
        if((arr[k]+arr[j])>100){
            cout<<arr[k]<<" + "<<arr[j]<<" "<<"over 100"<<endl;
        }
        else{
            cout<<arr[k]<<" + "<<arr[j]<<" "<<"under 100"<<endl;
        }
    }
}


return 0;

我注意到 arr[9] 的值等于一个数字,但程序有另一个数字。例如:创建的数组是 [42 68 35 1 70 25 79 59 63 65]

但我的输出显示 9 作为 arr[9]

42 + 68 超过 100

100 岁以下 42 + 35

42 + 1 低于 100

42 + 70 超过 100

100 岁以下 42 + 25

42 + 79 超过 100

42 + 59 超过 100

42 + 63 超过 100

42 + 9 低于 100

(我将只包括第一个循环,不再这样做)

我的65去哪了??

9是哪里来的??

我是不是写错了什么??

谢谢

标签: c++arraysrandom

解决方案


我注意到 arr[9] 的值等于一个数字,但程序有另一个数字。

计算机中的计数从0比总大小少一个数开始和结束。为了int arr[9]

  • 第九个指标是arr[8]
  • 第一个索引是arr[0]
  • 第二个索引是arr[1]

当你这样做时arr[9],你正在跨越边界(访问不在范围内的元素),这会导致未定义的行为。

因此,您的循环应该停止在i < 9

for(int i = 0; i < 9; i++) // i < 9 now vs i <=9

需要对第一个循环下面的循环进行相同的更改。


推荐阅读