我在挣扎于if works语句,并决定尝试同样的开关语句,由于某种原因,它碰巧起作用了,现在我的程序就像它应该的那样工作。但这让我想知道这两种密码之间有什么不同。在我看来,两者都应该起作用,但出于某种原因,两者都不起作用。
如果:
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;
}发布于 2015-03-24 11:51:56
在检查if语句中的条件时,我们必须使用==操作符检查条件是否相等。但是,您要将UNPACK_WAIT_FOR_1ST_NIBBLE的值分配给nibbleState。这不是条件。你必须检查一下
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE) //condition to check whether both are equal.发布于 2015-03-24 11:40:51
if (nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE)应该是
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)其余的支票也是如此。打开警告,编译器应该警告您这段代码。
发布于 2015-03-24 11:42:14
您要将值赋值给该变量,当该值为非零时,它将始终为真。把条件变成这样。
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)在执行分配时,您是这样做的,nibbleState=UNPACK_WAIT_FOR_1ST_NIBBLE,因此UNPACK_WAIT_FOR_1ST_NIBBLE的值将赋值给该变量。如果此变量UNPACK_WAIT_FOR_1ST_NIBBLE的值为非零,则第一个条件将始终为真。所以它不会检查其他的东西。
https://stackoverflow.com/questions/29231696
复制相似问题