You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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");
}

修正逻辑说明

  1. 遍历矩阵的每个(row, col)位置
  2. 用内层循环检查该位置是否存在于row_sel和col_sel的配对中,找到匹配就标记is_selected为1并提前终止检查
  3. 根据is_selected的值选择对应的打印格式,确保每个元素只被打印一次

这样就能得到你期望的输出效果,不会再出现重复的变量啦!

内容的提问来源于stack exchange,提问作者digdigdoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:44:17