为何矩阵中存在目标元素却输出Output Element Not Found?
问题原因
- 核心问题1:
Search函数内的循环变量i未初始化就直接参与循环判断,值为内存随机垃圾值,外层循环执行逻辑完全不可控。 - 核心问题2:
main函数中定义的是固定大小的5×5数组matrix[5][5],但Search函数接收的是变长数组形参matrix[][n],会按传入的列数n计算行偏移,和实际数组的行偏移(固定5个元素)不匹配。第一行偏移为0不受影响,从第二行开始寻址位置完全错误,因此找不到非第一行的元素。 - 附加问题:
void main不符合C语言标准写法,标准main函数返回值应为int。
修复后的代码
#include <stdio.h> // 形参调整为更易读的顺序:行数在前,列数在后 void Search(int rows, int cols, int matrix[][cols], int target) { // 显式初始化循环变量 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (target == matrix[i][j]) { printf("Found"); return; } } } printf("\nNot Found"); } int main() { int rows, col, target; printf("Enter size\nrows:"); scanf("%d", &rows); printf("\ncolumns:"); scanf("%d", &col); // 按输入的行列数定义变长数组,保证行偏移计算和实际存储一致 int matrix[rows][col]; for (int i = 0; i < rows; i++) { for (int j = 0; j < col; j++) { scanf("%d", &matrix[i][j]); } } // 打印输入的矩阵确认正确性 for (int i = 0; i < rows; i++) { for (int j = 0; j < col; j++) { printf("%d\t", matrix[i][j]); } printf("\n"); } printf("\nEnter Target:"); scanf("%d", &target); // 按形参顺序传递实参 Search(rows, col, matrix, target); return 0; }
验证说明
使用你提供的测试用例运行:输入2行2列,元素依次为1、2、3、4,搜索目标3时,会正确输出Found。
内容的提问来源于stack exchange,提问作者Ganesh Deshmukh
相关产品推荐
相关产品推荐

