即使“ If语句”似乎为真,也会执行其他语句

时间:2019-05-16 10:48:39

标签: c arrays if-statement

问题是要在字符矩阵中找到对称性(CollectionView) 其中CollectionView包含一些字符(仅 0 1 )。

请注意,在代码的输出中,一旦我将所有4个徽标元素都设置为0,即char logo[N][N],那么还将执行logo代码。

我已经实现了对称性检查代码,发现唯一的问题发生在给定的代码块上,在该代码块中执行else块并且给出错误的结果(NO)。

代码段:(if(0==0==0==0)是方矩阵的大小)

else

我希望输出为“ ”,因为每次检查4个徽标元素都相同(Nint YES=1; for(j=N-1;j>((N-1)>>1);j--) /* symmetricity condition particular to the problem*/ { for(k=0;k<((N-1)>>1);k++) { printf("%c %c %c %c\n",logo[j][k],logo[N-1-j][k],logo[j][N-1-k],logo[N-1-j][N-1-k]); // used this line for debugging if(logo[j][k]==logo[N-1-j][k]==logo[j][N-1-k]==logo[N-1-j][N-1-k])continue; //checking symmetricity else // here else is executed when all 4 logo elements are 0 { YES=0; break; } } } (YES==1)?printf("YES\n"):printf("NO\n"); ),但是在这里您可以看到在1111得到4个零之后,结果为

第一行是测试用例的编号,第二行是N,则N * N矩阵 OUTPUT :1st line is number of test case, second line is N, then N*N matrix

您可以看到所有徽标元素均为1111时,它会重新进入循环,但在0000之后,它会断裂并打印NO。

2 个答案:

答案 0 :(得分:1)

以此替换您的if语句:

if((logo[j][k]==logo[N-1-j][k]) && 
   (logo[N-1-j][k]==logo[j][N-1-k]) &&
   (logo[j][N-1-k]==logo[N-1-j][N-1-k]))
  continue;   //checking symmetricity

当前实现执行以下操作:

logo[j][k]==logo[N-1-j][k] // returns TRUE
==logo[j][N-1-k]           // returns FALSE (I imagine that logo[j][N-1-k] does not equal TRUE
==logo[N-1-j][N-1-k]       // returns FALSE (I imagine that logo[N-1-j][N-1-k] does not equal FALSE

答案 1 :(得分:1)

logo[j][k]==logo[N-1-j][k]==logo[j][N-1-k]

==保持关联。它返回01。这意味着第二个==01logo[j][N-1-k]进行比较。您不需要这样做,因此需要通过复制某些操作数并使用&&运算符来插入正确的操作数。