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
相关产品推荐
相关产品推荐

