2

私はcの初心者で、配列を行列形式で表示しようとしています。チュートリアルを見たことがありますが、それらのほとんどは、2 次元配列で行列の概念を適用するための 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つの要素を格納する正しい方法で2次元配列を宣言するだけです

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

あなたは arr[2][2] と宣言されています。これは、2x2 = 4 の 4 つの要素を格納する 2 次元配列です。

于 2013-08-31T19:13:59.250 に答える
1

TurboC++ のような IDE を使用しているようですがcodeblocks、Linuxgccやコンパイラなどの他のほとんどの IDE はヘッダー ファイルとその関数(および) をg++サポートしていないため、コードの移植性が低下しています。conio.hclrscr()getch()

あなたの配列サイズはあなたの3d マトリックスの要件を満たしていません.あなたが得ているパターンは単なる偶然です.私のLinuxプラットフォームでは、配列サイズを設定しようとするとこれが得られますarr[2],[2].

1 2 4
4 5 1
2 1 134513968

発生している問題は、while ループが原因ではなく、配列サイズが小さいために発生します。

これを試してください。
このコードは配列を sizearr[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 に答える