我的2d数组正在增加一个元素

时间:2014-08-05 17:39:28

标签: c multidimensional-array

我正在尝试从用户输入2d数组,我的数组大小为6,但我很难输入7个元素。这里有什么错误?你还可以告诉我如何使用单指针从用户输入一个二维数组。

#include <stdio.h>

int main()
{
    int a[2][3] = {0};
    int i=0,j=0,l=0;
    printf("enter 2d");

    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d\n",&a[i][j]);
        }
    }

    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d\n",a[i][j]);
        }
    }

    return 0;
}

这是我的输出:

./input2dusingsinglearray 

enter 2d

1
2
3
4
5
6
7

1
2
3
4
5
6

4 个答案:

答案 0 :(得分:3)

问题在于您的scanf等待额外的介绍,请更改为:

#include <stdio.h>

int main(void)
{
    int a[2][3] = {0};
    int i=0,j=0,l=0;

    printf("enter 2d\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d\n",a[i][j]);
        }
    }
    return 0;
}

另请注意,必须以这种方式初始化2d数组:

int a[2][3] = {{0},{0}};

发出警告:

  

警告:初始化程序[-Wmissing-braces]

周围缺少大括号

答案 1 :(得分:2)

尝试使用scanf("%d", &a[i][j])代替scanf("%d\n", &a[i][j])

答案 2 :(得分:1)

虽然其他答案都很好并且正确,但请允许我添加我的解决方案

#include <stdio.h>
#include <stdlib.h>

int main(){

    size_t rows = 2;
    size_t columns = 3;

    int* matrix = (int *) malloc( rows * columns * sizeof(int));

    printf("insert into 2d matrix[%d][%d]:\n", rows, columns);

    int i = 0, j = 0;

    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < columns; j++)
        {
            scanf("%d", (matrix + (i * columns) + j));
        }
    }


    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < columns; j++)
        {
            printf("matrix[%d][%d] => %d\n", i, j, *(matrix + (i * columns) + j));
        }
    }
    free(matrix);
    return 0;
}

它为2d数组动态分配内存,如果你想将指针传递给函数,它可以是一个优雅的解决方案。

答案 3 :(得分:0)

昨天我遇到了同样的问题,发现当我们使用额外的空间或其他任何东西时,它需要额外的输入。然后,我像下面这样使用了scanf函数。

{{1}}