删除break和Continue语句

时间:2018-10-15 01:50:09

标签: c break continue

有人可以推荐我的break和Continue语句之外的替代方法吗?我知道最好不要使用它们。我正在考虑使用do做,但这会使条件变得混乱。有没有更干净的方法可以做到这一点?我正在使用C。由于要求,我不能同时拥有它们。

int inCmpStr( char *a, char *b)
{   
    int i;
    for (i = 0 ; a[i] && b[i]; ++i){
        if (a[i] == b[i] || (a[i] ^ 32) == b[i]){
            continue;
        }
        else {
            break; 
        }
    }
    if(a[i] == b[i]){
        return 0;
    }
    if ((a[i] | 32) < (b[i] | 32)){
        return -1;
    }
    return 1;
}

2 个答案:

答案 0 :(得分:3)

您可以使用子功能来避免中断并继续使用。

int cmpChar(char a, char b) 
{
    if (a == b || (a ^ 32) == b) {
        return -1;
    }

    if (a == b) {
        return 0;
    }

    if ((a | 32) < (b | 32)){
        return -1;
    }

    return 1;
}

int inCmpStr( char *a, char *b)
{   
    int i;
    int result;

    for (i = 0 ; a[i] && b[i]; ++i){
        result = cmpChar(a[i], b[i]);
        if (result != -1) {
            return result;
        }
    }

    return 1;
}

答案 1 :(得分:3)

此代码:

for (start; X; increment)
    if (Y)
        continue;
    else
        break;

等效于:

for (start; X && Y; increment)
    ;

因此,您可以使用:

int i;
for (i = 0; a[i] && b[i] && (a[i] == b[i] || (a[i] ^ 32) == b[i]); ++i)
    ;