1

配列[2][2]の行を交換できません。配列外のことをしているようです。(私はこのコードが狂った(狂った)と思う

1)印刷します。2) 交換しようとしています(問題はほぼそこにあると考えています)。3)もう一度印刷します。(ただし、要素の値は以前とは異なります)

#include <stdio.h>#
#include <stdlib.h>
#include <time.h>
#define RANGE 99

int main()
{
    int l1,l2;
    int i,j;
    int arr[2][2];       // There should be arr[3][3]. FOR MORE 
    int temp_line[2];    // DETAILS SEE THE ACCEPTED ANSWER.

    srand((unsigned)time(NULL));

    /* Filling in */
    for (i = 0; i <= 2; i++)
    {
        for (j = 0; j <= 2; j++)
            arr[i][j] = 1 + rand()%RANGE;
        printf("\n");
    }

    /* Displaying */
    for (i = 0; i <= 2; i++)
    {
        for (j = 0; j <= 2; j++)
            printf("%2.d ", arr[i][j]);
        printf("\n");
    }


    printf("\nEnter the No. of lines to swap them.\n"); // Remember about the 0th element.
    scanf("%d%d", &l1, &l2);   // The 1-st and the 2-nd lines.


    /** Swapping lines. PROBLEM!  */
    for (j = 0; j <= 2; j++)
            temp_line[j] = arr[l1][j];  // Remember the 1-st required line.

    for (j = 0; j <= 2; j++)
        arr[l1][j] = arr[l2][j];    // Copying each element of the 2-nd required line 1-st one.

    for (j = 0; j <= 2; j++)
        arr[l2][j] = temp_line[j];  //  Copying "Remembered" 1-st required line.


    /* Displaying */
    for (i = 0; i <= 2; i++)
    {
        for (j = 0; j <= 2; j++)
            printf("%2.d ", arr[i][j]);
        printf("\n");
    }

    return 0;
}
4

2 に答える 2

3

3x3アレイは次のように宣言する必要があります。

int arr[3][3];  // Array 3x3

配列を宣言するとき、数字は割り当てる「スロット」の数を示します。3x3配列が必要なため、を指定する必要があります3

配列にアクセスするときは、インデックスを指定します。インデックスは0で始まるため、最初の要素にアクセスする場合は、を使用し0ます。

カウントとインデックスは2つの異なるものです。

于 2013-03-24T00:17:14.137 に答える
1

配列には2つの要素がありfor (i = 0; i <= 2; i++)ますが、最後から1つ繰り返します。

でなければなりません for (i = 0; i < 2; i++)

于 2013-03-24T00:16:33.070 に答える