2

我是 c 的新手,并试图以矩阵形式显示一个数组。我看过教程,但其中大多数都处理 for 循环以在二维数组中应用矩阵概念。我使用while循环并以我的方式检查它。它虽然以矩阵形式显示,但并未显示准确的输出。如果我插入数字 1,2..,9,它必须以如下形式显示:

1 2 3
4 5 6
7 8 9

但它显示为:

1 2 4
4 5 7
7 8 9

我无法理解为什么会这样。

#include<stdio.h>
#include<conio.h>

void main()
{

    int i=0,j=0;
    int arr[2][2];
    clrscr();
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            scanf("%d",&arr[i][j]);
            j++;
        }
        i++;
    }
    i=0;
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            printf("%d ",arr[i][j]);

            //printf("%c",k);
            j++;
            //k++;
        }
        printf("\n");
        i++;
    }
    printf("%d",arr[0][2]);
    getch();
4

2 回答 2

4

您只需要以正确的方式声明两个维度​​数组即可存储 9 个这样的元素

int arr[3][3];  //3x3 =9 elements

你被宣布为 arr[2][2] 。这是存储四个元素 2x2 = 4 的二维数组

于 2013-08-31T19:13:59.250 回答
1

似乎,您使用的是 TurboC++ 之类的 IDE,但大多数其他 IDE(例如codeblocks和 linuxgccg++编译器)不支持conio.h头文件及其功能,例如clrscr()and getch(),这使您的代码的可移植性降低。

您的数组大小不满足您的3d 矩阵的要求,而您得到的模式只是一个巧合,在我的 linux 平台上,当我尝试设置数组大小时,它给了我这个arr[2],[2]

1 2 4
4 5 1
2 1 134513968

您遇到的问题是因为您的数组大小较小,而不是因为您的 while 循环。

试试这个,
这段代码用 size 初始化你的数组arr[3][3],这将解决你的问题。

#include<stdio.h>

int main()
{

    int i=0,j=0;
    int arr[3][3];
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            scanf("%d",&arr[i][j]);
            j++;
        }
        i++;
    }
    i=0;
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            printf("%d ",arr[i][j]);

            //printf("%c",k);
            j++;
            //k++;
        }
        printf("\n");
        i++;
    }
    printf("%d",arr[0][2]);
return 0;
}
于 2013-08-31T19:17:46.553 回答