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;
}