我试图从用户输入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]);