C编程:带数组的函数

我正在尝试编写一个函数,该函数在2d数组中找到最大值,其中行为4和col为4,其中2d数组填充了用户输入。 我知道我的主要错误是函数中的数组,但我不确定它是什么。

如果有人能找到我出错的地方而不是编写新代码,我将不胜感激。 除非我去南方。

我的尝试:

#include  void largest(int array); int main() { int x,y,trash; int array[4][4]; int row = 4; int col = 4; int bigNum,greater; bigNum=largest(array); printf("Please enter a value: ") for(x=0;x<row;x++) { for(y=0;y<(col);y++) { scanf("%d",&array[x][y]); scanf("%d",&trash); } } printf("The largest number in the array is : ",bigNum); } void largest(int array[][]) { for(x=0; x<row; x++) { for(y=0; y array[x][y+1]) { array[x][y+1] = array[x][y]; } } printf("\n") } big = array[x][y]; return big; } 

这里有一些问题需要解决,第一个是你不能将int array[][]作为参数,你需要提供除第一个维度以外的所有维度, int array[][4]就足够了这个有限的情况。

但是,由于rowcolmain中的局部变量,因此对于largest函数体是不可见的,因此它们需要被传递,进行签名

 void largest(int row, int col, int array[row][col]); 

由于这是一个void函数,因此无法返回任何值。 它将修改它所给出的数组,因此更改将是可见的。

如果你正在寻找直接的日志错误,找到最大的函数是非常疯狂的。 一个更健全的实现是跟踪到目前为止你看到的最大元素:

 int largest(int row, in col, int array[row][col]) { int big = array[0][0]; // assume the first element is the largest for (int i = 0; i < row, ++i) { for (int j = 0; j < col; ++j) { if (array[i][j] > big) big = array[i][j]; } } return big; } 

然后你可以从main调用函数

 int bigNum = largest(row, column, array); 

您已将函数声明为void并尝试存储函数的返回值,这是不可能的,因此将其更改为int数据类型。 然后行和col变量值不会传递给最大的函数。 您应该全局声明它还是将其作为参数传递给最大的函数。 你正试图获得垃圾的价值,我不知道有什么需要。 你可以删除它。 并在最大的function中进行以下更改:

 #include  int largest(int [4][4]); int row = 4; int col = 4; int main() { int x,y,trash; int array[4][4]; int bigNum,greater; printf("Please enter a value: "); for(x=0;xbig) { big = array[x][y]; } } printf("\n"); } return big; } 

试试这个代码!!!!!

您需要首先从用户获取数组中的值。 所以你应该是:

 int main() { int x,y,trash; int array[4][4]; int row = 4; int col = 4; int bigNum,greater; printf("Please enter a value: ") for(x=0;x 

数组未初始化,您正在执行此操作

 bigNum=largest(array); 

当arrays中有元素时,您应该找到最大的。

此代码中还有许多其他错误:

  1. 最大的function是不正确的,它返回无效
  2. 你不能将array [] []作为参数,它应该是array [] [4]。

OMG在我查看代码时发现几乎每一行都有bug。

 #include  int largest(int array[][4]); int main() { int x,y; int array[4][4]; int row = 4; int col = 4; int bigNum; printf("Please enter a value: "); for(x=0;xmax) { max = array[x][y]; } } } return max; } 

代码中的错误

  1. 你不能像你一样传递二维数组。
  2. 你找到最大的逻辑是不合适的,你在两个相邻元素的任何运动中进行比较,如果第一个很小,你实际上是在使它们相等
  3. 变量作用域错误, rowcolxy绑定到main方法,您无法在其他方法中访问它们。 查看Global Variables以便在程序文件中的任何位置访问它们。
  4. largest method scanf for trash和printf进行不必要的scanf for trash

     #include int row = 4; int col = 4; int largestElement(int array[][4],int row); int main() { int x,y; int array[row][col]; int bigNum,greater; printf("Please enter a value: "); for(x=0;x< row;x++) { for(y=0;y< col;y++) { scanf("%d",&array[x][y]); } } bigNum = largestElement(array, sizeof(array) / sizeof(array[0])); printf("The largest number in the array is : ",bigNum); } int largestElement(int array[][4],int row) { int x,y; int big =0; for(x=0;x 

您尝试使用此代码来查找二维数组中的最大元素。

  #include  int largest(int [][4],int ,int); int main() { int x,y,trash; int array[4][4]; int row = 4; int col = 4; int bigNum,greater; printf("Please enter a value: "); for(x=0;x