我正在努力使用if else语句并决定尝试使用switch语句,并且由于某种原因它碰巧工作了,现在我的程序就像它应该的那样......但它让我想知道这两个代码之间有什么不同。在我看来,他们两个都应该工作,但出于某种原因不能......
如果:
if (nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE)
{
if ((code = isUnPackedItem(nb)) == UNPACKED_ITEM)
{
nibbleState = UNPACK_WAIT_FOR_2ND_NIBBLE;
}
else
{
putc(code, fpOut);
++byteOutCnt;
}
}
else if (nibbleState = UNPACK_WAIT_FOR_2ND_NIBBLE)
{
nibbleState = nb;
nibbleState = UNPACK_WAIT_FOR_3RD_NIBBLE;
}
else if (nibbleState = UNPACK_WAIT_FOR_3RD_NIBBLE)
{
nibbleLow = nb;
putc((nibbleMid << 4 | nibbleLow, fpOut);
nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE;
++byteOutCnt;
}
开关:
switch (nibbleState)
{
case UNPACK_WAIT_FOR_1ST_NIBBLE:
if ((code = isUnPackedItem(nb)) == UNPACKED_ITEM)
{
nibbleState = UNPACK_WAIT_FOR_2ND_NIBBLE;
}
else
{
putc(code, fpOut);
++byteOutCnt;
}
break;
case UNPACK_WAIT_FOR_2ND_NIBBLE:
nibbleMid = nb;
nibbleState = UNPACK_WAIT_FOR_3RD_NIBBLE;
break;
case UNPACK_WAIT_FOR_3RD_NIBBLE:
nibbleLow = nb;
putc((nibbleMid << 4) | nibbleLow, fpOut);
nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE;
++byteOutCnt;
break;
}
答案 0 :(得分:1)
在检查if语句中的条件时,我们必须使用==
运算符检查条件是否相等。
但您要将UNPACK_WAIT_FOR_1ST_NIBBLE
的值分配给nibbleState
。
这不是一个条件。您必须将条件检查为
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE) //condition to check whether both are equal.
答案 1 :(得分:0)
if (nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE)
应该是
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)
其他检查也是如此。打开警告,编译器应该警告你这段代码。
答案 2 :(得分:0)
您正在为该变量赋值,当该值不为零时,它始终为true。 将条件改为这样。
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)
在进行分配时,您正是这样做的,nibbleState=UNPACK_WAIT_FOR_1ST_NIBBLE
因此UNPACK_WAIT_FOR_1ST_NIBBLE
的值将分配给该变量。如果此变量UNPACK_WAIT_FOR_1ST_NIBBLE
的值不为零,则第一个条件将始终为真。所以它不会检查其他东西。
答案 3 :(得分:0)
答案 4 :(得分:0)
如上所述,当您应该检查条件(==)时,您要为nibbleState(=)赋值。
另外,我注意到在你的第二个条件检查中,你正在为同一个变量分配一个值(覆盖第一个赋值)。
else if (nibbleState = UNPACK_WAIT_FOR_2ND_NIBBLE)
{
nibbleState = nb; // << This value gets overwritten by the next line
nibbleState = UNPACK_WAIT_FOR_3RD_NIBBLE;
}
答案 5 :(得分:0)
如果您使用if..else
条件,则问题是,您使用了==
运算符,而不是使用=
运算符来检查相等性。
预期行为
根据定义的值#检查nibbleState
的值。如果值相等,则if
条件会产生 TRUE 。
实际行为
将定义的值分配给nibbleState
。如果非零中定义的值,则if
条件会产生 TRUE 。
建议:启用compilar标志以警告您这样的潜在陷阱。在上述情况下,-Wparentheses
或-Wall
与gcc
produces a warning一起使用,例如
警告:建议用作真值的分配括号
# - &gt; UNPACK_WAIT_FOR_<n.th>_NIBBLE