我想从用户那里输入一个二维数组,我的数组大小是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
问题出在你的 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] 。
尝试使用 scanf("%d", &a[i][j])
而不是 scanf("%d\n", &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] => %d\n", i, j, *(matrix + (i * columns) + j));
}
}
free(matrix);
return 0;
}
它为二维数组动态分配内存,如果你想向一个函数传递指针,它可以是一个优雅的解决方案。
我昨天也遇到了同样的问题,发现当我们使用额外的空间或其他东西时,它需要额外的输入。然后我使用了下面的scanf函数。
scanf("%d",&a[i][j]);