0

我正在编写一个程序,其中我需要将字符数组转换为整数。但是,我需要利用所有整数的全部潜力(在int课程类型的能力范围内)(即:正、负和 0),而不是仅仅使用正整数。但是我需要访问一些哨兵值,最好是在 typeint中。float如果可以避免的话,我不想为了使用一个非整数哨兵而制作所有东西。

为了暂时解决这个问题,我一直在使用以下“技巧”:(token数组在哪里)

int TokenToInt(char token[])
{
    int current=0, value=0;
    char isNeg = 'F';

    if (token[current] == '-') {
        isNeg = 'T';
        current++;
    }

    while (1) {
        if (isdigit(token[current]) == 0)
            return -1;
        else {
            value *= 10;
            value += token[current]-'0';
        }

        current++;
    }

    if (isNeg == 'F') return value;
    if (isNeg == 'T') return -1 * (value + 1);
}

因此,在程序的其余部分中,您将-1用于错误检查,一旦完成,如果返回值是负数,则增加返回值。哪个有效,除非用户输入-2^15,但最好不能输入-1,对吧?

但它也很麻烦,并且有点令人困惑,只是随机增加值。那么我应该坚持使用这种 ^ 方法还是有替代方法可以完成相同的任务?如果有替代方案,这个替代方案是什么?

4

1 回答 1

2

如果我正确地红色这个,你真的是说你需要返回一个 int,但你还需要能够检测到错误。有两种常见的方法:将返回值放在通过引用传递的参数中,或者添加另一种方法来设置/获取错误。

首先,它会像

int myfcn(int* result, char[] input) {
    // do stuff
    ...
    if( success ) {
        *result = ...;
        return ERROR_SUCCESS;
    } else {
        return ERROR;
    }
}

第二个看起来像......

void caller() {
    int value = TokenToInt(...);
    if( getLastError() != ERROR_SUCCESS ) {
        // handle the error
    }
}

int TokenToInt(...) {
    // do stuff
    if( error ) {
        setLastError(ERROR_WHATEVER);
        return result
    }
    return result;
}

您可以查看 getLastError 函数以获取更多详细信息。

于 2013-08-16T14:10:57.393 回答