【问题标题】:Declaring a function in C gives error for expected ';', ',' or ')'在 C 中声明一个函数会为预期的 ';'、',' 或 ')' 提供错误
【发布时间】:2013-11-30 11:49:29
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int second_smallest(int &A[m][n], m, n);

int main()
{
    int m, n;
    do{
        scanf("%d %d", &m, &n);
    }while(((m < 1) || (m > 5)) && ((n < 1) || (n > 5)));

    int A[m][n], i, j;

    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++)
            scanf("%d", &A[i][j]);

    printf("Second smallest number in the two dimensional array is %d", second_smallest(A[m][n], m, n));

    return 0;
}

int second_smallest(int &A[m][n], m, n){
    int i, j, min, second_min;

    if (A[0][0] > A[0][1]){
        min = A[0][0];
        second_min = A[0][1];
    }
    else{
        min = A[0][1];
        second_min = A[0][0];
    }

    for (int i = 0;i < m; i++)
        for (int j = 0; j < n; j++){
            if (A[i][j] <= min)
                second_min = min;
                min = A[i][j];
            }
            else if (A[i][j] > second_min){
                second_min = A[i][j];
            }
}

我正在编写一个函数来查找二维数组中的第二小数,但我在声明该函数时遇到了问题。

它给了我以下几行的错误: int second_smallest(int &amp;A[m][n], m, n);int second_smallest(int &amp;A[m][n], m, n){

错误说明如下: error: expected ';', ',', or ')' before '&amp;' token.

对于这一行的一个警告: printf("Second smallest number in the two dimensional array is %d", second_smallest(A[m][n], m, n));

说: warning: implicit declaration of function 'second_smallest'

【问题讨论】:

  • C 没有引用。
  • 警告是因为第一个错误。在 C(以及从 C 派生的语言)中,有一个根错误是很常见的,这会导致其他错误和/或警告。
  • 您还会遇到其他错误(或者在修复第一个错误时至少会遇到其他错误):当您声明A 参数时,变量mn 未声明。
  • 您也没有正确调用该函数,而不是传递数组的arrays-of-int A 而是传递单个整数值A[m][n],这也在边界之外A.

标签: c function multidimensional-array


【解决方案1】:
#define m 4
#define n 3  

int second_smallest(int &A[m][n], m, n);

                                       // WHAT IS M, N ? IN C YOU HAVE TO DECLARE 
                                      // STATIC ARRAY SIZE BEFORE COMPILATION
                                      // DECLARE THEM AS MACROS

int main()

{


int m, n;
do{
    scanf("%d %d", &m, &n);
}while(((m < 1) || (m > 5)) && ((n < 1) || (n > 5)));

int A[m][n], i, j;

for(i = 0; i < m; i++)
    for(j = 0; j < n; j++)
        scanf("%d", &A[i][j]);

printf("Second smallest number in the two dimensional array is %d",   second_smallest(A[m][n], m, n));

 return 0;
}

int second_smallest(int &A[m][n], m, n){

int i, j, min, second_min;

if (A[0][0] > A[0][1]){
    min = A[0][0];
    second_min = A[0][1];
}
else{
    min = A[0][1];
    second_min = A[0][0];
}

for (int i = 0;i < m; i++)    // SOME BRACKETS MISMATCH AFTER THIS , CHECK IT.
    for (int j = 0; j < n; j++){
        if (A[i][j] <= min)
            second_min = min;
            min = A[i][j];
        }
        else if (A[i][j] > second_min){
            second_min = A[i][j];
        }
}

1。在任何地方使用它们之前声明数组的大小,如果您不知道大小,请将指针作为函数参数并使用 sizeof() 运算符计算其大小。

2.检查代码中的括号;您遇到的错误是括号数量不匹配。

【讨论】:

  • 我认为解释您做了哪些更改以及为什么需要这些更改将有助于 OP 理解答案。是的缩进很重要
【解决方案2】:

函数原型的第一个问题是参数&amp;A[m][n]。 C 不允许通过引用传递。你的函数原型是错误的

int second_smallest(int &A[m][n], m, n);  

C 不允许这种类型的函数原型。
另一个问题是当遇到A[m][n] 时,编译器不知道mn。 改成

int second_smallest(int m, int n,int A[m][n]);  

之后修改代码sn -p

for (int i = 0;i < m; i++)
    for (int j = 0; j < n; j++){
        if (A[i][j] <= min)
            second_min = min;
            min = A[i][j];
        }
        else if (A[i][j] > second_min){
            second_min = A[i][j];
        }  

for (int i = 0;i < m; i++){
    for (int j = 0; j < n; j++){
        if (A[i][j] <= min){
            second_min = min;
            min = A[i][j];
         }
        else if (A[i][j] > second_min){
            second_min = A[i][j];
        }
     } 
 } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多