c++ - 这个数组值是从哪里来的?
问题描述
所以我在重新开始上课之前练习编码,我想创建一个由 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是哪里来的??
我是不是写错了什么??
谢谢
解决方案
我注意到 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
需要对第一个循环下面的循环进行相同的更改。
推荐阅读
- python - 如何使用 Python 在 QGIS 中选择和缩放到图层
- java - 带有 CheckBoxListCell 的 Javafx 列表视图不适用于拖放
- c# - Unity C# 用正确的旋转实例化粒子效果
- bash - 提取第一个和第二个点字符实例之间的子字符串
- solr - 如何查找数据导入失败文档的原因?
- linear-programming - 是否可以在 GLPK 中定义多界优化问题?
- c# - 如何返回字符串“test”并且我正在使用?操作员
- javascript - 如何根据下拉列表中的选择呈现组件?
- laravel - Laravel 5.4 Authentication password reset redirect based on email address
- apache-spark - 从 spark 代码更改单个作业的临时路径