使用FOR循环遍历数组校验条件时打印内容重复问题求助
解决矩阵打印时元素重复的问题
嘿,我一眼就发现问题出在哪儿了!你现在的三层循环逻辑有问题——最内层的a循环会让每个matrix[row][col]元素被打印等于row_sel数组长度的次数,这就是你看到重复输出的核心原因。
问题拆解
你原本的逻辑应该是:对矩阵的每个(row, col)位置,检查它是否在row_sel和col_sel对应的坐标配对里,如果是就用|%d|格式打印,否则用%d格式打印。但现在的写法是,每遍历一个a(也就是每检查一组坐标对),就打印一次当前元素,导致同一个元素被反复打印多次。
修正后的代码
我们可以先给每个矩阵元素做一次“是否匹配坐标对”的检查,用一个标志位记录结果,然后根据标志位只打印一次元素:
/* Printing the matrix */ for(row = 0; row < 15; row++) { for(col = 0; col < 8; col++) { // 先初始化标志位为未匹配 int is_selected = 0; // 遍历坐标对,检查当前位置是否在选中列表里 for(a = 0; a < sizeof(row_sel)/(sizeof(row_sel[0])); a++) { if(row == row_sel[a] && col == col_sel[a]) { is_selected = 1; break; // 找到匹配就跳出循环,不用再检查其他项 } } // 根据标志位选择打印格式,每个元素只打印一次 if(is_selected) { printf("|%d|", matrix[row][col]); } else { printf(" %d ", matrix[row][col]); } } printf("\n"); }
修正逻辑说明
- 遍历矩阵的每个
(row, col)位置 - 用内层循环检查该位置是否存在于
row_sel和col_sel的配对中,找到匹配就标记is_selected为1并提前终止检查 - 根据
is_selected的值选择对应的打印格式,确保每个元素只被打印一次
这样就能得到你期望的输出效果,不会再出现重复的变量啦!
内容的提问来源于stack exchange,提问作者digdigdoot
相关产品推荐
相关产品推荐

