C中if / else语句的问题

时间:2017-04-23 18:59:11

标签: c if-statement gcc

我的if / else结构有点麻烦。

所以,对于" num = 65279",我不确定为什么,我写的这个if / else结构最终会进入第一个if if,如预期的那样,但也会进入最后if ("if(num <= 65535")。我不确定为什么会发生这种情况,因为我正确使用了{}。我怎样才能更好地重构我的代码,以便不再发生此错误。或者我为这个错误做了什么? num是一个无符号的短文。

我正在使用Linux gcc编译器。

if(num >= 55296 && num < 56320){ 
        ...
}
else{   
    if(num <= 127){
                ...
    }
    else{
        if(num <= 2047){
                ...
        }
        else{
            if(num <= 65535){   ...
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您应该正确格式化代码,这样可以更容易理解。在这里你可以看到程序将达到的所有要点(......)。您提到的两个if语句都可以根据您的代码运行。如果这不是它应该如何,那么你需要重写它。如果它们都应该能够运行,那么你需要指定num的值是什么并提供更多信息。

if(num >= 55296 && num < 56320) { 
    ...
} else {   
    if(num <= 127) {
        ...
    } else {
        if(num <= 2047) {
            ...
        } else {
            if(num <= 65535) {
                ...
            } else {//I added this
                ...
            }
        }
    }
}

编辑:我看到你说num是一个2字节的整数,所以我添加的部分永远不会实际运行。 “if(num&lt; = 65535){”将永远为真,因为你不能存储更高的数字。

答案 1 :(得分:0)

如果num值等于65279,正如您所说,那么您的代码就是按照您所说的去做。没有错误。如果num值为less than 65535,则表示执行最后一个条件。其中,65279 IS less than 65535。我不确定你是否很好地表达了这个问题,但这似乎就是答案。

答案 2 :(得分:0)

此处的格式不会显示在评论中,因此我将其作为答案发布。

在尝试阅读代码时,使用一致缩进作为清晰格式的Kudeos实际上非常重要。但是你使你的代码变得比它需要的更复杂。

此代码

if ( cond1 )
{
    ...
}
else
{
    if ( cond2 )
    {
        ...
    }
    else
    {
        if ( cond3 )
        {
            ...
        }
        else
        {
            if ( cond4 )
            {
                ...
            }
        }
    }
}

相同
if ( cond1 )
{
    ...
}
else if ( cond2 )
{
    ...
}
else if ( cond3 )
{
    ...
}
else if ( cond4 )
{
    ...
}

哪一个更简单,更容易理解?