如何读取函数内的二维数组?

时间:2015-10-31 10:34:42

标签: c arrays

我有这个代码如何使用函数读取二维数组? 我写这个函数它工作读取所有数字,但当我输出到控制台数组时,没有我输入的值

离 输入: 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;
}

3 个答案:

答案 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++)