Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:有符号整数值?_C_Sentinel - Fatal编程技术网

C:有符号整数值?

C:有符号整数值?,c,sentinel,C,Sentinel,我正在编写一个程序,其中需要将字符数组转换为整数。但是,我需要利用所有整数的全部潜能,而不是仅仅使用正整数(当然,在类型int的能力范围内)(即:正、负和0)。但是我需要访问一些sentinel值,最好是在类型int中。我不想让所有东西都浮动,只要我能避免,我就可以使用一个非整数哨兵 为了暂时解决这个问题,我刚刚使用了以下“技巧”:(其中token是数组) 因此,在程序的其余部分中,使用-1进行错误检查,完成后,如果返回值为负值,则增加返回值。除了用户可能输入-2^15,但不能输入比-1更好的选

我正在编写一个程序,其中需要将字符数组转换为整数。但是,我需要利用所有整数的全部潜能,而不是仅仅使用正整数(当然,在类型
int
的能力范围内)(即:正、负和0)。但是我需要访问一些sentinel值,最好是在类型
int
中。我不想让所有东西都浮动,只要我能避免,我就可以使用一个非整数哨兵

为了暂时解决这个问题,我刚刚使用了以下“技巧”:(其中
token
是数组)

因此,在程序的其余部分中,使用
-1
进行错误检查,完成后,如果返回值为负值,则增加返回值。除了用户可能输入
-2^15
,但不能输入比
-1
更好的选项外,其他选项都有效,对吗


但它也很麻烦,而且有点混乱,只是随机增加值的蓝色。那么,我应该坚持这种方法,还是有其他方法可以完成同样的任务?如果有替代方案,该替代方案是什么?

如果我正确地勾选了该选项,您实际上是在说您需要返回一个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函数以了解更多详细信息。

为什么不简单地使用bool或int来代替作为字符数组的标记isNeg?另外,有些人认为例程中应该只有一个返回。这段代码在while循环中绑定为return-1或segfault。@Jim isNeg只是一个正常的字符值…?@msam我测试了代码,它正常工作了…我缺少了什么?对不起,我想我更好地理解你的问题。通常,为错误代码添加另一条路径比尝试多路复用返回更有意义。按照atk所写的思路。
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;
}