文字配列を整数に変換する必要があるプログラムを書いています。ただし、正の整数だけを使用するのではなく、すべての整数の可能性を最大限に活用する必要があります (int
もちろん、型の能力の範囲内で) (つまり、正、負、および 0)。しかし、私はいくつかのセンチネル値にアクセスする必要がありますint
。float
回避できれば、非整数の歩哨を 1 つ使用できるようにするためだけに、すべてを作成する必要はありません。
この問題を一時的に解決するために、次の「トリック」を使用しています: (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
でしょう?
しかし、それはまた面倒であり、突然値をランダムにインクリメントするだけでは混乱を招きます。したがって、この ^ メソッドに固執する必要がありますか、それとも同じタスクを達成する代替手段はありますか? 代替案がある場合、この代替案は何ですか?