【问题标题】:Where is this array value coming from?这个数组值是从哪里来的?
【发布时间】:2020-08-20 04:54:45
【问题描述】:

所以我在重新开始上课之前练习编码,我想创建一个由 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

100 岁以下 42 + 9

(我将只包含第一个循环以不再进行此操作)

我的 65 去哪儿了??

9 是从哪里来的??

我是不是写错了什么??

谢谢

【问题讨论】:

  • for(int i = 0; i&lt;=9; i++) 迭代次数太多了。该数组只有 9 个元素。
  • 老实说,问题似乎在于您错过了教科书、教程或课程的关键部分。请返回查看它对数组大小和索引的说明。

标签: c++ arrays random


【解决方案1】:

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

计算机中的计数从0 开始,以比总大小少一个数字结束。对于int arr[9]

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

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

因此,您的循环应该在 i &lt; 9 处停止:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2020-07-31
    • 2019-11-18
    • 2018-09-25
    • 2014-10-23
    • 2021-11-09
    相关资源
    最近更新 更多