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



我试图从用户输入2d数组,我的数组大小是6,但我可以输入7个元素。这里的误差是多少?你能告诉我如何使用单个指针从用户输入2d数组吗?

#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("%dn",&a[i][j]);
        }
    }
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%dn",a[i][j]);
        }
    }
    return 0;
}

下面是我的输出:

./input2dusingsinglearray 
enter 2d
1
2
3
4
5
6
7
1
2
3
4
5
6

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

#include <stdio.h>
int main(void)
{
    int a[2][3] = {0};
    int i=0,j=0,l=0;
    printf("enter 2dn");
    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("%dn",a[i][j]);
        }
    }
    return 0;
}

还要注意,2d数组必须这样初始化:

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

打开警告:

警告:初始化式[- wmissing -brace]周围缺少大括号

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

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

#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] => %dn", i, j, *(matrix + (i * columns) + j));
        }
    }
    free(matrix);
    return 0;
}

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

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

scanf("%d",&a[i][j]);

相关内容

  • 没有找到相关文章

最新更新