处理空的'else if'

时间:2014-01-02 23:38:53

标签: c

我最近遇到过一种我以前从未遇到的情况。

我有一个类似于下面例子的C语句。什么被认为是这种情况下的最佳做法?如果我不想为那个输入做任何事情,但又不想犯错误,那么{}是否足够或是否有更好的标准?

for( traverse = input; *traverse != '\0'; traverse++ )
{
    if( *traverse == 'a' ) {
        // do things
    }
    else if( *traverse == 'b' ) {
        // do other things
    }
    else if( *traverse == 'c' ) {
        // don't do anything
        // continue loop, but don't error
    }
    else
        // error handling here
}

4 个答案:

答案 0 :(得分:10)

我想我会把它写成:

else if( *traverse == 'c' ) 
    continue;

这使得你明确地想要继续循环的下一次迭代而不在此迭代中做任何其他事情。

虽然从编译器的角度看,一对空括号也可以正常工作,但我认为continue使得其他人阅读代码的意图更加明显(并且有助于确保他们不会认为有意图在那里发表意外删除的声明,或该订单上的某些内容)。

答案 1 :(得分:1)

另一种选择是使用switch

for( traverse = input; *traverse != '\0'; traverse++ )
{
    switch( *traverse ) {
        case 'a':
            // do things
            break;
        case 'b':
            // do other things
            break;
        case 'c':
            // don't do anything
            break;
        default:
            //error handling
    }
}

答案 2 :(得分:1)

我认为问题是如何处理空的其他问题。但在这种具体情况下的解决方案是改变这一行:

else if( *traverse == 'c' ) {
// don't do anything
// continue loop, but don't error
}
else
// error handling here

成:

else if( *traverse != 'c' ) {
// error handling here
}

答案 3 :(得分:0)

这是XY问题的典型示例(请参阅http://xyproblem.info/),其中问题基本上是错误的问题。

您应该只为最后一位编写代码:

else if( *traverse != 'c' ) {
    // error handling here
}