数组的最后一个元素自动获取垃圾
Array last element automatically gets garbage
我得到了这个输出
学习如何使用数组,我做了一个练习来检查数组是否按升序排列,在第一次运行后,这就是我得到的,我找不到问题所在。
当我打印数组时,它在最后一个数组中显示了一些垃圾。
#include <iostream>
using namespace std;
const int CAPACITY1 = 5;
int main()
{
int arr1[CAPACITY1];
bool a = false;
//init the first input
cout << "Enter 6 numbers: " << endl;
cin >> arr1[0];
int max = arr1[0];
int NoE = 1;
//init the loop to insert numbers
for (int i = 1; i <= CAPACITY1; i++) {
cout << "Enter 6 numbers: " << endl;
cin >> arr1[i];
NoE++;
//check if input is bigger than max
if (arr1[i] > max)
max = arr1[i];
else
a = true;
}
if (a == true)
cout << "The array is not in an ascending order" << endl;
else
cout << "The array is in an ascending order" << endl;
cout << NoE;
//end
cout << endl;
return 0;
}
C++中数组中的索引是从零开始的。这意味着,声明为T arr[N]
的容量为N
的数组的索引从0
开始,到N - 1
结束。
若要使用for
循环访问此类阵列,请使用此
for (int index = 0; index < N; ++index)
这里的循环从1到5:
for (int i = 1; i <= CAPACITY1; i++) {
cout << "Enter 6 numbers: " << endl;
cin >> arr1[i];
所以你只输入了五个数字,你从来没有在arr1[0]
中输入任何东西,你确实在arr[5]
中输入了一些无效的东西。
除此之外,我怀疑你可能错过了练习的要点。如果这是一项家庭作业,那么我想他们希望你对现有数组进行迭代,并报告它是否按升序排列。
您的for循环是错误的,并且超出了界限。请注意,C++中的数组从0开始,而不是从1开始。正确的循环如下:
for (int i = 0; i < CAPACITY1; i++) {
cout << "Enter 6 numbers: " << endl;
cin >> arr1[i];
NoE++;
//check if input is bigger than max
if (arr1[i] > max)
max = arr1[i];
else
a = true;
}
这两行:
int CAPACITY1 = 5;
int arr1[CAPACITY1];
意味着你的数组arr1
的大小是5,也就是说,它有5个元素,从0到4。尝试访问位置5处的元素是错误的。
也就是说,在你的cout
信息中,你谈论的是6个数字。如果要存储6个元素,请将CAPACITY1
的值更改为6,例如:
const int CAPACITY1 = 6;
根据您的评论,我认为您对数组的大小感到困惑,可能是因为您听到过"最后一个元素的索引总是偏离1"之类的话。是的,但这并不意味着要存储6个元素,在定义它时应该使用数字5!如果你想要6个元素,大小必须是6,这里没有陷阱。棘手的部分是索引将从0开始,因此最后一个元素位于位置[size - 1]
,而不是[size]
。澄清:
如果声明int arr1[5];
,则将有5个元素,索引范围从0到4。
如果您声明int arr1[6];
,您将有6个元素,索引范围从0到5。
顺便说一句,这说明了为什么避免硬编码数字(在本例中为6)并始终使用变量是一个好主意。尝试
cout << "Enter " << CAPACITY1 << " numbers: " << endl;
这样,数组的大小和消息将始终匹配。
总之,如果你想使用6个数字,你需要使用
const int CAPACITY1 = 6;
并且,由于您在循环之前处理第一个元素(索引为0),因此循环必须从1开始,并运行到索引为5的最后一个元素,因此:
for (int i = 1; i < CAPACITY1; i++) {
顺便说一句,检查数组是否按升序排列的逻辑令人困惑。对您来说,a == true
意味着它是而不是升序。它是有效的,但它是反直觉的。我建议更改它。
- 获取向量C++中第一个值和最后一个值的和
- push_back通过自行创建的对象获取最后一个元素的向量
- 如何获取 std::filesystem::p ath 中的最后一个目录?
- 查询事件日志.如何查询才能单独获取第一个和最后一个事件?
- CPP:如何获取字符的最后一个索引
- 这种获取模板参数包中最后一个元素的方法是否有隐藏的开销?
- C++:为什么最后一个输出不是地址以及如何获取值 9
- 如何使用find_if获取最后一个迭代器
- 如何在QT中获取XML文件的最后一个节点
- 获取第 n 项与 std::set 中第一个/最后一个的偏移量
- 获取列表的第一个和最后一个元素<string>给我非法指令错误
- 如何获取输入文件的行的第二个和最后一个字符,并在C++中组成数组
- istream::getline() 未获取最后一个字符
- WinDivert 1.0.5 DivertRecv() 方法 获取最后一个错误 998
- 获取最后一个错误的宽字符版本
- 如何从数据库(postgre)获取最后一个值并在Qt中显示它
- 从unordered_set中获取最后一个元素
- 无法从文件中获取最后一个 int .txt
- 使用fstream从文件中获取最后一个字节的最佳方法
- push_back获取最后一个元素的向量