当以下程序有以下输入时(从cin读取):
1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1
输出结果令人惊讶:
1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1
#include<iostream>
using namespace std;
int main()
{
int arey[3][3];
int i,j;
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
cin>>arey[j][i];
}
}
arey[0][0]=1;
arey[3][3]=1;
i=0,j=0;
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
cout<<arey[j][i];
}
}
return 0;
}
有人可以解释我应该改变什么以获得与输入相同的输出吗?
答案 0 :(得分:6)
矩阵是3x3还是4x4?
你创建了3x3,但循环运行了4个元素,你还更新了[3] [3]
基本上你的索引会溢出,你会覆盖矩阵中的另一个单元格。
更新:cheecked您的输入,使用:int arey[4][4];
答案 1 :(得分:1)
我真的不认为我理解你的问题,但这是错误的:
int arey[3][3];
...
for(j=0;j<=3;j++) // <= invalid
...
array[3][3]=1; // out of bounds
arey
是一个3*3
数组。您无法访问arey[3][?]
,这是超出界限的。唯一有效的索引是0..2
。
一旦你写完了数组的边界,你的程序行为就变得不明确了。
答案 2 :(得分:1)
数组使用基于0的索引,因此
的索引的有效范围 int arey[3][3];
是0 <= i < 3
和0 <= j < 3
因此,您需要将for
循环中的条件更改为严格<
而不是<=