首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开关与if else语句之间的差异

开关与if else语句之间的差异
EN

Stack Overflow用户
提问于 2015-03-24 11:39:21
回答 5查看 98关注 0票数 1

我在挣扎于if works语句,并决定尝试同样的开关语句,由于某种原因,它碰巧起作用了,现在我的程序就像它应该的那样工作。但这让我想知道这两种密码之间有什么不同。在我看来,两者都应该起作用,但出于某种原因,两者都不起作用。

如果:

代码语言:javascript
复制
   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;
    }

开关:

代码语言:javascript
复制
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;
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-24 11:51:56

在检查if语句中的条件时,我们必须使用==操作符检查条件是否相等。但是,您要将UNPACK_WAIT_FOR_1ST_NIBBLE的值分配给nibbleState。这不是条件。你必须检查一下

代码语言:javascript
复制
         if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE) //condition to check whether both are equal.
票数 1
EN

Stack Overflow用户

发布于 2015-03-24 11:40:51

代码语言:javascript
复制
 if (nibbleState = UNPACK_WAIT_FOR_1ST_NIBBLE)

应该是

代码语言:javascript
复制
 if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)

其余的支票也是如此。打开警告,编译器应该警告您这段代码。

票数 0
EN

Stack Overflow用户

发布于 2015-03-24 11:42:14

您要将值赋值给该变量,当该值为非零时,它将始终为真。把条件变成这样。

代码语言:javascript
复制
if (nibbleState == UNPACK_WAIT_FOR_1ST_NIBBLE)

在执行分配时,您是这样做的,nibbleState=UNPACK_WAIT_FOR_1ST_NIBBLE,因此UNPACK_WAIT_FOR_1ST_NIBBLE的值将赋值给该变量。如果此变量UNPACK_WAIT_FOR_1ST_NIBBLE的值为非零,则第一个条件将始终为真。所以它不会检查其他的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29231696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档