【问题标题】:what's wrong with the following code ? Getting error : Add is not a func or pointer以下代码有什么问题?出现错误:Add 不是函数或指针
【发布时间】:2017-09-01 12:18:55
【问题描述】:

只有第一行矩阵的值通过 Add()。我得到错误的结果。例如:矩阵 1 有元素 1,2,3,4。但是当我在 add() 中打印这些值时,我我得到 1,2,0,0。

#include <stdio.h>

int main()
{
    int arr[100][100], arr1[100][100];

    int m, n, x, y, z;

    printf("\n Enter order of matrix");
    scanf("%d %d ", &m, &n);

    //ENTRY OF MATRIX

    printf("\n Enter Values of Matrix 1");
    for (x = 0; x < m; x++)
    {
        for (y = 0; y < n; y++)
            scanf("%d ", &arr[x][y]);
    }

    printf("\n Enter Value of Matrix two ");
    for (x = 0; x < m; x++)
    {
        for (y = 0; y < n; y++)
            scanf("%d ", &arr1[x][y]);
    }

    add(m, n, arr, arr1);

    return 0;
}

void add(int m, int n, int a[m][n], int b[m][n])
{   
    int x, y;
    for (x = 0; x < m; x++)
    {
        for (y = 0; y < n; y++)
            printf("%d     ", a[x][y]);
        printf("\n");
    }
}

【问题讨论】:

  • 请修正缩进并在函数之间添加空白线。 ATM,看起来就像一团乱麻。
  • 如果你的代码格式不是一团糟,我会费心看一看。
  • ...否则我们会让你使用 Python
  • 请立即检查代码
  • 你在对编译器撒谎,它通过不做你想做的事而得到自己的回报。您正在传递两个大小为 100x100 的数组;您是在告诉编译器您正在传递两个较小的数组。这会导致不快乐;数据被读入一组内存位置,而您正在尝试读取另一组。您应该在使用之前声明该函数 C99 需要这个)。你绝对应该准确地使用它。你有一些认真的重新思考要做。您可以使用 100x100 矩阵,但您必须告诉函数更多信息。

标签: c function matrix multidimensional-array


【解决方案1】:

在 C 中,函数必须在使用前声明,并且参数的类型必须在声明和调用之间匹配。

在 OP 的代码中,一对二维数组声明为

int arr[100][100];

传递给main()之后定义的函数

void add(int m, int n, a[m][n], b[m][n]) { /* ... */ }  

产生两个问题:

  • add()main()中使用,但之前没有声明,只在之后定义。
  • arrarr1 是 100 x 100 ints 的二维数组,但函数 add() 接受两个大小为 m x n 的可变长度数组。

OP有两种修复方式,要么改变函数的接口,在main()之前声明,像这样:

void add(int m, int n, a[][100], b[][100]);  // and define after main

或者更改arrarr1的声明:

// includes...

void add(int m, int n, a[m][n], b[m][n]);  

int main(void)
{
    int m, n;
    // ...
    // read n and m before using them to declare the two VLA
    int arr[m][n], arr1[m][n];

    // ...

    add(m, n, arr, arr1);

    // ...
}

void add(int m, int n, a[m][n], b[m][n])
{
    // ... 
}  

【讨论】:

    【解决方案2】:

    我已经修复了您代码中的一些问题。我在 main() 之前添加了声明。

    void add(int m,int n,int a[m][n],int b[m][n]);
    

    另外,我已将 空格 移除到 scanf 函数中。

    int main()
    {
            int arr[100][100],arr1[100][100];
            int m,n,x,y,z;
    
            printf("\n Enter order of matrix");
            scanf("%d %d",&m,&n);
    
            //ENTRY OF MATRIX
    
            printf("\n Enter Values of Matrix 1");
            for(x=0;x<m;x++)
            {
                    for(y=0;y<n;y++)
                            scanf("%d",&arr[x][y]);
            }
            printf("\n Enter Value of Matrix two ");
            for(x=0;x<m;x++)
            {
                    for(y=0;y<n;y++)
                            scanf("%d",&arr1[x][y]);
            }
            add(m,n,arr,arr1);
            return 0;
    }
    
    void add(int m,int n,int a[m][n],int b[m][n])
    {
    
     // Your operation
    
    }
    

    【讨论】:

    • scanf 在取整数时是否考虑空格?
    • 请注意,传递 100x100 矩阵但说您传递的是 4x5 矩阵,例如,会导致问题。还有更多工作要做。
    【解决方案3】:

    首先,请修正你的缩进,它让你的代码很难阅读。

    这个错误是因为你不能使用一个没有被声明的函数。

    要解决此问题,请在包含后添加原型:

    void add(int m,int n,int a[m][n],int b[m][n]);
    

    或者尝试把你的整个函数放在你的主函数之前。

    【讨论】:

    • 这是问题的一部分,但不是全部。
    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多