You need to enable JavaScript to run this app. C语言嵌套for循环中配套if的else语句不生效问题
优惠活动
大模型
产品
解决方案
定价
更多

C语言嵌套for循环中配套if的else语句不生效问题

3行3列二维数组连续0序列统计问题说明

问题背景

编写C语言代码统计3行3列二维数组中每行连续0序列的最长长度及对应行号,调试时出现逻辑异常:

  • 嵌套循环内的判断使用配套if-else结构时,if条件不满足的场景下else无法正常执行
  • 将else替换为独立的「数组元素不等于0」判断if语句后,逻辑可正常运行

注:该问题已解决,此前的问题表述存在不清晰的情况。

相关代码片段

初始完整问题代码

#include <stdio.h>
int main()
{
    int line=0;
    int longest=0;
    int v1[3][3]={{1,0,0},{1,1,1},{7,8,9}};
    for(int i=0 ; i<3;i++){
        for(int j=0; j<2 ;j++ ){
            if(v1[i][j]==0){
                int temp=1;
                for(int k=j+1; k< 3; k++){
                    printf("%d\n",k);
                    if( v1[i][k]==0 ){
                        temp++;
                    }
                    if( v1[i][k]=!0 ){
                        if( temp>longest ){
                            longest=temp;
                            line=i+1;
                        }
                    }
                }
            }
        }
    }
    printf("line:%d\nlenght:%d",line,longest);
}

存在异常的if-else代码段

if( v1[i][k]==0 ){
    temp++;
}
else{
    if( temp>longest ){
        longest=temp;
        line=i+1;
    }
}

可正常运行的独立if判断代码段

if( v1[i][k]==0 ){
    temp++;
}
if( v1[i][k]!=0 ){
    if( temp>longest ){
        longest=temp;
    }
}

核心问题原因

  • 初始代码存在运算符笔误:if( v1[i][k]=!0 ) 并非判断数组元素不等于0,而是先对0做逻辑取反得到1,再将1赋值给v1[i][k],整个表达式的返回值恒为1(永远为真),导致逻辑分支判断完全失效
  • if-else结构本身语法没有问题,此前运行异常大概率是同一笔误延伸到了else版本的判断逻辑中
  • 修正为正确的不等于运算符!=后,独立if判断可正常工作,等价逻辑的if-else结构也可正常运行

补充逻辑优化点

  • 输出的长度变量存在拼写错误:lenght 应为 length
  • 若某行的连续0序列延伸到行尾(没有遇到非0元素打断),现有逻辑不会触发最长长度更新,需要在行遍历结束后补充一次当前累计长度temp和全局最长长度longest的比较判断

内容的提问来源于stack exchange,提问作者Erinç Utku Öztürk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 11:54:07