我正在尝试从用户输入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
答案 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}}