我正在编写一个程序,我需要将字符数组转换为整数。但是,我不是只使用正整数,而是需要利用所有整数的全部潜力(当然,在int
类型的能力范围内)(即:正,负和0)。但是我需要访问一些标记值,非常如此最好在类型int
内。我不想让所有事情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
以外,哪个有效?
但它也很麻烦,有点混乱,只是随机增加价值。那么我应该坚持使用这种^方法还是有替代方案来完成同样的任务?如果有替代方案,那么这个替代方案是什么?
答案 0 :(得分: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函数以获取更多详细信息。