2D 阵列的最小值和最大值为 2


#include <stdio.h>
#include <stdlib.h>
#define ROWS 15
#define COLS 10
void find_elements(int mtr[ROWS][COLS], int a, int b, int *p1, int *p2);
int main(void) {
int i, j;
int z, l;
int arr[ROWS][COLS];
int min;
int max;
FILE *fp;
fp = fopen("numbers2.txt", "r");
printf("------------------------------------------------------------------------------n");
printf("                                   Loaded Array                               n");
printf("------------------------------------------------------------------------------n");
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
fscanf(fp, "%d", &arr[i][j]);
printf("%dt", arr[i][j]);
}
printf("nn");
}
do {
printf("Enter row[1-15]:n");
scanf("%d", &z);
} while ((z > 15) || (z < 1));
do {
printf("Enter column[1-10]:n");
scanf("%d", &l);
} while ((l > 10 || (l < 1)));
printf("------------------------------------n");
printf("The Max of Row %d is: %dn", z, max);
printf("The min of Column %d id: %dn", l, min);
find_elements(arr[ROWS][COLS], i, j, &min, &max);
fclose(fp);
return 0;
}
void find_elements(int mtr[ROWS][COLS], int a, int b, int *p1, int *p2) {
int k;
*p1 = mtr[a][0];
*p2 = mtr[0][b];
for (k = 1; k < COLS; k++) {
if (*p1 <= mtr[a][k])
*p1 = mtr[a][k];
}
for (k = 1; k < ROWS; k++) {
if (*p2 >= mtr[k][b])
*p2 = mtr[k][b];
}
}

当我编译此程序时,出现以下消息:

[Warning] passing argument 1 of 'find_elements'
makes pointer from integer without a cast
[Note] expected 'int (*)[10]' but argument is of type 'int'

我用 C 编程大约 3 个月,以前没有编程经验,所以我不明白我做错了什么。我需要一些帮助。 谢谢

正如评论指出的那样,在这一行中:

find_elements(arr[ROWS][COLS],i,j,&min,&max);

函数调用的第一个参数是单个int,实际上是一个甚至不存在的int,它调用未定义的行为。

你需要做的是,将整个数组传递给函数,如下所示:

find_elements(arr,i,j,&min,&max);
// ^^^  just the array name

代码中至少有 3 个问题:

  • 你应该把arr作为第一个参数传递给find_elements
  • 您应该将函数调用移到printf之前
  • 您应该传递zl,而不是ij
  • 为什么从搜索中排除了第 0 行和第 0 列?

这是一个修改版本:

#include <stdio.h>
#define ROWS 15
#define COLS 10
void find_elements(int mtr[ROWS][COLS], int a, int b, int *p1, int *p2);
int main(void) {
int i, j, z, l;
int arr[ROWS][COLS];
int min, max;
int c;
FILE *fp;
fp = fopen("numbers2.txt", "r");
if (fp == NULL) {
printf("cannot open numbers2.txtn");
return 1;
}
printf("------------------------------------------------------------------------------n");
printf("                                   Loaded Array                               n");
printf("------------------------------------------------------------------------------n");
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (fscanf(fp, "%d", &arr[i][j]) != 1) {
printf("invalid datan");
return 1;
}
printf("%dt", arr[i][j]);
}
printf("nn");
}
fclose(fp);
do {
printf("Enter row[1-%d]:n", ROWS);
if (scanf("%d", &z) != 1) {
while ((c = getchar()) != EOF && c != 'n')
continue;
if (c == EOF) {
printf("end of filen");
return 1;
}
printf("invalid entryn");
continue;
}
} while (z > ROWS || z < 1);
do {
printf("Enter column[1-%d]:n", COLS);
if (scanf("%d", &l) != 1) {
while ((c = getchar()) != EOF && c != 'n')
continue;
if (c == EOF) {
printf("end of filen");
return 1;
}
printf("invalid entryn");
continue;
}
} while (l > COLS || l < 1);
find_elements(arr, z, l, &min, &max);
printf("------------------------------------n");
printf("The Max of Row %d is: %dn", z, max);
printf("The min of Column %d id: %dn", l, min);
return 0;
}
void find_elements(int mtr[ROWS][COLS], int a, int b, int *p1, int *p2) {
int k;
*p1 = mtr[a][0];
*p2 = mtr[0][b];
for (k = 1; k < COLS; k++) {
if (*p1 < mtr[a][k])
*p1 = mtr[a][k];
}
for (k = 1; k < ROWS; k++) {
if (*p2 > mtr[k][b])
*p2 = mtr[k][b];
}
}

最新更新