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]
就足够了这个有限的情况。
但是,由于row
和col
是main
中的局部变量,因此对于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中有元素时,您应该找到最大的。
此代码中还有许多其他错误:
- 最大的function是不正确的,它返回无效
- 你不能将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; }
代码中的错误
- 你不能像你一样传递二维数组。
- 你找到最大的逻辑是不合适的,你在两个相邻元素的任何运动中进行比较,如果第一个很小,你实际上是在使它们相等
- 变量作用域错误,
row
,col
,x
和y
绑定到main方法,您无法在其他方法中访问它们。 查看Global Variables
以便在程序文件中的任何位置访问它们。 -
用
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