我有这个代码如何使用函数读取二维数组? 我写这个函数它工作读取所有数字,但当我输出到控制台数组时,没有我输入的值
离 输入: 2 1 2 3 4 输出: 16 256 1 4525376
#include <stdio.h>
#include <stdlib.h>
void citMat(int a, int n) {
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
printf("a[%d][%d]",i,j);
scanf("%d", &a);
}
}
int main()
{ int i,j;
int a[10][10],n;
printf("Introdu n:");
scanf("%d", &n);
citMat(a[10][10],n);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
您需要将原型更改为(此处数组维度很重要)
void citMat(int a[10][10], int n)
其他更改由其他人解释(整个代码如下)
#include <stdio.h>
#include <stdlib.h>
void citMat(int a[10][10], int n) {
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]:",i,j);
fflush(stdout);
scanf("%d", &a[i][j]);
}
}
int main()
{ int i,j;
int a[10][10],n;
printf("Introdu n:");
scanf("%d", &n);
if (n > 10)
{
fprintf(stderr, "Invalid input %d\n", n);
return 1;
}
citMat(a,n);
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
答案 1 :(得分:0)
1。如果您想将2-d
数组传递给函数。将函数定义更改为 -
void citMat(int a[10][10], int n) { // first parameter to take a 2-d int array
2。然后在函数citMat
内部输入 -
scanf("%d", &a[i][j]); // you need to write like this
注意 -
1。数组索引从0
开始,因此如果您有数组a[n]
,则它具有来自0 to n-1
的有效索引。
因此,请从所有0
循环中的n
开始阅读for
。如果您包含n
,那么您将访问索引超出范围并写入它将导致未定义的行为。
所以,请注意这一点。
2。 int main()
- &gt; int main(void)
或int main(int argc,char **argv)
答案 2 :(得分:0)
您需要更改程序中的一些内容才能使其正常工作
1)使用数组的基地址调用函数,如
citMat(a,n);
2)将您的功能定义更改为,
void citMat(int a[10][10], int n)
使其接受2D数组作为参数。
3)将每个元素的scanf()
更改为
scanf("%d", &a[i][j]);
4)由于数组索引从0
开始,将所有for
循环终止条件更改为
for(i=1;i<n;i++)