C语言函数与main函数中矩阵值不一致问题求助
问题分析与解决方案
问题根源
你的代码中**elementPosition函数存在两个致命错误**,直接导致矩阵数据被篡改:
- 赋值运算符误用为比较运算符:判断元素是否等于目标值时,用了
=(赋值操作)而非==(比较操作)。遍历数组时,所有元素会被强制赋值为传入的num(也就是后续调用时的最小值或最大值),这就是矩阵最后全变成同一个值的原因。 - 数组越界访问:函数最后返回
pos[2],但pos是长度为2的数组,合法索引只有0和1,访问pos[2]属于越界操作,会触发未定义行为。
修复后的elementPosition函数
int elementPosition(int arr[ROWS][COLS], int num, int pos[2]) { // 初始化位置为未找到状态 pos[0] = -1; pos[1] = -1; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { // 用==做值比较,而非=赋值 if (arr[i][j] == num) { pos[0] = i; pos[1] = j; // 找到第一个匹配项后直接退出,避免覆盖位置 return 1; // 返回1表示成功找到目标元素 } } } return 0; // 返回0表示未找到目标元素 }
额外说明
- 原函数遍历整个数组会导致多个相同目标值时,最后一个匹配项覆盖之前的位置,添加
return可以保留第一个匹配的位置(若需收集所有匹配项,可调整逻辑,但当前需求只需一个位置即可)。 - 修复后,
generateMtx中输入的矩阵数据不会被篡改,后续matrixSmallest、matrixLargest以及main函数的打印都能正常工作。
内容的提问来源于stack exchange,提问作者bignutty205
相关产品推荐
相关产品推荐

