C 我试图构建一个2*2数组,但我的程序需要5个输入。为什么?

C 我试图构建一个2*2数组,但我的程序需要5个输入。为什么?,c,for-loop,C,For Loop,我无法将输入语句中遗漏的地方归零。我构建它是为了获取四个值作为输入,但它又多了一个值 操纵数组项以检查是否存储了第五个值。基本的东西 #include <stdio.h> int main() { int i,j,a[2][2]; for(i=1;i<=2;i++) { for(j=1;j<=2;j++) scanf("%d\t",&a[i][j]); } printf("\n%d\t%d\n%d\t

我无法将输入语句中遗漏的地方归零。我构建它是为了获取四个值作为输入,但它又多了一个值

操纵数组项以检查是否存储了第五个值。基本的东西

#include <stdio.h>

int main()
{
   int i,j,a[2][2];
   for(i=1;i<=2;i++)
   {
     for(j=1;j<=2;j++)
        scanf("%d\t",&a[i][j]);
    }

    printf("\n%d\t%d\n%d\t%d", a[1][1],a[1][2],a[2][1],a[2][2]);
}
#包括
int main()
{
int i,j,a[2][2];
对于(i=1;i你已经声明了这一点

int a[2][2];
它有四个项目,
a[0][0]
a[0][1]
a[1][0]
a[1][1]

但是,您从
1
开始编制索引,然后上升到
2
,因此,您会越界,这是一种未定义的行为。 任何事情都有可能发生

更改您的循环,即:

   for(i=0;i<2;i++)
   {
     for(j=0;j<2;j++)
     // as you were
for(i=0;i您已经声明了这一点

int a[2][2];
它有四个项目,
a[0][0]
a[0][1]
a[1][0]
a[1][1]

但是,您从
1
开始编制索引,然后上升到
2
,因此,您会越界,这是一种未定义的行为。 任何事情都有可能发生

更改您的循环,即:

   for(i=0;i<2;i++)
   {
     for(j=0;j<2;j++)
     // as you were
用于(i=0;i
#包括
int main()
{
int i,j,a[2][2];
对于(i=0;i
#包括
int main()
{
int i,j,a[2][2];

对于(i=0;i)当您声明一个包含两个条目的数组时,如
a[2]
,唯一有效的索引是0和1。但是循环和printf使用索引1和2。一个解决方案是将数组变大
int a[3][3]
。在C中,数组从0开始,而不是从1开始,因此声明的数组
a[2][2]
包含
a[0][0]
a[1][1]
a[1][2]
a[2][1]
a[2][2]
不存在。您的数组有4个元素:
a[0][0]
a[0][1]
a[1][0]和
a[1][1]
。谢谢你的建议……但它似乎不是这样的。这是我们在for循环中定义的,因为我能够获得预期的结果。当我打印时,a[0][0]…a[1][1],除了a[1][1]之外的所有值都有零。请阅读。当您声明一个包含两个条目的数组时,如
a[2]
,唯一有效的索引是0和1。但是循环和printf使用索引1和2。一个解决方案是将数组变大
inta[3][3]
。在C中,数组从0开始,而不是从1开始,因此声明的数组
a[2][2]
包含
a[0][0]
直到
a[1][1]
a[1][2][1]
a[2][2]
不存在。您的数组有4个元素:
a[0][0]
a[0][1]
a[1][0]
a[1][1]
。谢谢您的建议……但它似乎不是那样工作的。这是我们在for循环中定义的,因为我能够获得预期的结果。打印时,[0][0]…a[1][1],除a[1][1]之外的所有值都有零。请阅读。非常感谢。该选项卡有一些“\t”麻烦。我还有一个q。当我在同一个程序(int I,j,m,n,a[2][2],b[2][2]中用“\t”多加一个矩阵时,表示b[0][0]中的第一个值出现在a[1][1]之后输入的第五个值。然后它存储在哪里?(我应该指定代码吗?)非常感谢..该选项卡给一些'\t'带来了麻烦。我还有一个问题。当我在同一个程序(int i,j,m,n,a[2][2],b[2][2]中用'\t'表示b[2][2]再添加一个矩阵时,在a[1][1]之后输入的第五个值作为b[0][0]中的第一个值出现。那么它存储在哪里?(我应该指定代码吗?)感谢您的帮助。当我尝试使用我的原始程序时,我的意思是(i=1;i当您尝试使用原始程序时?您是否对
printf
语句进行了排序?如果您有核心转储,您可以将其加载到调试器中,以查看哪里出了问题。请集中精力确保您没有尝试访问
[2]
a
中的
-尽管是其中一个索引。感谢您的帮助。当我尝试使用我的原始程序时,我的意思是(i=1;i当您尝试使用原始程序执行何操作时?您是否对
printf
语句进行了排序?如果您有一个核心转储,您可以将其加载到调试器中,以查看哪里出了问题。请集中精力确保您不会尝试访问
a
中的
[2]
-以获取这两个索引。