在C中声明函数会导致预期的';错误''';或';)'; #包括 #包括 第二名(int&A[m][n],m,n); int main() { int m,n; 做{ scanf(“%d%d”,&m,&n); }而(((m5))和((n5)); int A[m][n],i,j; 对于(i=0;i
我正在编写一个函数来查找二维数组中的第二小数,但我在声明函数时遇到了一个问题 下面几行有一个错误:在C中声明函数会导致预期的';错误''';或';)'; #包括 #包括 第二名(int&A[m][n],m,n); int main() { int m,n; 做{ scanf(“%d%d”,&m,&n); }而(((m5))和((n5)); int A[m][n],i,j; 对于(i=0;i,c,function,multidimensional-array,C,Function,Multidimensional Array,我正在编写一个函数来查找二维数组中的第二小数,但我在声明函数时遇到了一个问题 下面几行有一个错误: int次最小值(int&A[m][n],m,n); 和 int次最小值(int&A[m][n],m,n){ 错误说明如下: 错误:应在“&”标记之前加“;”、“、”或“)。 这条线还有一个警告: printf(“二维数组中第二小的数字是%d”,第二小的(A[m][n],m,n)); 说: 警告:函数“第二小”的隐式声明 #include <stdio.h> #include <s
int次最小值(int&A[m][n],m,n);
和
int次最小值(int&A[m][n],m,n){
错误说明如下:
错误:应在“&”标记之前加“;”、“、”或“)。
这条线还有一个警告:
printf(“二维数组中第二小的数字是%d”,第二小的(A[m][n],m,n));
说:
警告:函数“第二小”的隐式声明
#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];
}
}
#定义n3
第二名(int&A[m][n],m,n);
//什么是M,N?在C中你必须声明
//编译前的静态数组大小
//将它们声明为宏
int main()
{
int m,n;
做{
scanf(“%d%d”,&m,&n);
}而(((m<1)| |(m>5))和((n<1)| |(n>5));
int A[m][n],i,j;
对于(i=0;iA[0][1]){
min=A[0][0];
第二分钟=A[0][1];
}
否则{
min=A[0][1];
第二分钟=A[0][0];
}
对于(int i=0;i
1.在任何地方使用数组之前声明数组的大小,如果不知道大小,请将指针作为函数参数,并使用sizeof()运算符计算其大小
2.检查代码中的括号;错误在于括号数量不匹配。函数原型的第一个问题是参数
&a[m][n]
。C不允许通过引用传递。函数原型错误
#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];
}
}
C不允许这种类型的函数原型。另一个问题是
m
和n
在编译器遇到A[m][n]
时是未知的。
换成
int second_smallest(int &A[m][n], m, n);
然后更改代码段
int second_smallest(int m, int n,int A[m][n]);
for(int i=0;i
到
for(int i=0;i
C没有引用。警告是因为第一个错误。在C(以及从C派生的语言)中,有一个根错误是很常见的,这会导致其他错误和/或警告。您也会有其他错误(或者至少在修复第一个错误时会有其他错误):当您声明A
参数时,变量m
和n
不会被声明。您也不会正确调用函数,而是传递intA
数组的单个整数值A[m][n]
,这也超出了A
的范围。我认为解释您所做的更改以及为什么需要更改将有助于OP理解答案。是的,缩进确实很重要。
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];
}
}
}