[英]Min and Max of 2 of 2D array
#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("%d\t", arr[i][j]);
}
printf("\n\n");
}
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: %d\n", z, max);
printf("The min of Column %d id: %d\n", 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);
function 调用的第一个参数是单个int
,实际上是一个甚至不存在的int
,它会调用未定义的行为。
您需要做的是,将整个数组传递给 function,如下所示:
find_elements(arr,i,j,&min,&max);
// ^^^ just the array name
您的代码中至少存在 3 个问题:
arr
作为第一个参数传递给find_elements
,printf
调用。z
和l
而不是i
和j
。这是修改后的版本:
#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.txt\n");
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 data\n");
return 1;
}
printf("%d\t", arr[i][j]);
}
printf("\n\n");
}
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 file\n");
return 1;
}
printf("invalid entry\n");
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 file\n");
return 1;
}
printf("invalid entry\n");
continue;
}
} while (l > COLS || l < 1);
find_elements(arr, z, l, &min, &max);
printf("------------------------------------\n");
printf("The Max of Row %d is: %d\n", z, max);
printf("The min of Column %d id: %d\n", 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];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.