0

文字配列を整数に変換する必要があるプログラムを書いています。ただし、正の整数だけを使用するのではなく、すべての整数の可能性を最大限に活用する必要があります (intもちろん、型の能力の範囲内で) (つまり、正、負、および 0)。しかし、私はいくつかのセンチネル値にアクセスする必要がありますintfloat回避できれば、非整数の歩哨を 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でしょう?

しかし、それはまた面倒であり、突然値をランダムにインクリメントするだけでは混乱を招きます。したがって、この ^ メソッドに固執する必要がありますか、それとも同じタスクを達成する代替手段はありますか? 代替案がある場合、この代替案は何ですか?

4

1 に答える 1