我的二维数组多了一个元素

问题描述 投票:2回答:4

我想从用户那里输入一个二维数组,我的数组大小是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
c multidimensional-array
4个回答
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] 。


2
投票

尝试使用 scanf("%d", &a[i][j]) 而不是 scanf("%d\n", &a[i][j]).


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;
}

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


0
投票

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

scanf("%d",&a[i][j]);
© www.soinside.com 2019 - 2024. All rights reserved.