学习如何使用数组,我得到了一个练习来检查数组是否按升序排列,在第一次运行后,这就是我得到的,我无法找到问题。
当我打印数组时,它在最后一个数组中显示出一些垃圾。
#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;
}
答案 0 :(得分:1)
C ++中数组中的索引是基于零的。这意味着,容量为N
的数组(声明为T arr[N]
)的索引从0
开始,以N - 1
结尾。
要使用for
循环访问此类数组,请使用此
for (int index = 0; index < N; ++index)
答案 1 :(得分:1)
这里的循环操作从1到5:
for (int i = 1; i <= CAPACITY1; i++) {
cout << "Enter 6 numbers: " << endl;
cin >> arr1[i];
因此,您只需输入五个数字,而且您从未在arr1[0]
中添加任何内容,而且您确实在arr[5]
中放了一些无效的内容。
除此之外,我怀疑你可能错过了练习的重点。如果这是一个家庭作业,那么我想他们希望你迭代一个现有的数组并报告它是否按升序排列。
答案 2 :(得分:0)
你的for循环错误,并且越界。注意C ++中的数组从0开始,而不是1.正确的for循环如下:
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;
}
答案 3 :(得分:0)
这两行:
int CAPACITY1 = 5;
int arr1[CAPACITY1];
表示数组arr1
的大小为5,即它有5个元素,从0到4.尝试访问位置5的元素是错误的。
那就是说,在你的cout
消息中,你会谈到6个数字。如果要存储6个元素,请将CAPACITY1
的值更改为6,如:
const int CAPACITY1 = 6;
根据你的评论,我认为你对数组的大小感到困惑,可能是因为你听到了类似#34的内容;最后一个元素的索引始终是1&#34;。是的,但这并不意味着要存储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
表示不升序。它有效,但这是违反直觉的。我建议改变它。