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.

计数和索引是两个不同的东西。

于 2013-03-24T00:17:14.137 回答
1

该数组有 2 个元素,但有for (i = 0; i <= 2; i++)您在末尾迭代一个。

一定是 for (i = 0; i < 2; i++)

于 2013-03-24T00:16:33.070 回答