0

16進数を10進数に変換しようとしています。私がこれまでに思いついたことは次のとおりです。

#include <unistd.h>
#include <stdio.h>

long convert(char *input, short int *status){
    int length = 0;
    while(input[length])
    {
        length++;
    } 
    if(length = 0)
    {
        *status = 0;
        return 0;
    }
    else
    {
        int index;
        int converter;
        int result = 0;
        int lastNumber = length-1;
        int currentNumber;
        for(index = 0; index < length; index++){
            if(index == 0)
            {
                converter = 1;
            }

            else if(index == 1)
            {
                converter = 16;
            }

            else{
                converter *= 16;
            }
            if(input[lastNumber] < 45 || input[lastNumber] > 57)
            {
                *status = 0;
                return 0;
            }
            else if(input[lastNumber] > 45 && input[lastNumber] < 48)
            {
                *status = 0;
                return 0;
            }

            else{
                if(input[lastNumber] == 45)
                {
                    *status = -1;
                    return result *= -1;
                }
                currentNumber = input[lastNumber] - 48;
                result += currentNumber * converter;
                lastNumber--;
            }
        }
        *status = -1;
        return result;
    }
}

int main(int argc, char **argv)
{
    char *input=0;
    short int status=0;
    long rezult=0;
    if(argc!=2)
    {
        status=0;
    }
    else
    {
        input=argv[1];
        rezult=convert(input,&status);
    }

    printf("result: %ld\n", rezult);
    printf("status: %d\n", status);


    return 0;
}

どういうわけか、私は常に結果0を取得します。また、他の外部関数(printfを除く)を使用することも許可されていません。上記のコードの何が問題なのですか?

4

1 に答える 1

2

これ:

if(dolzina = 0)
{
    *status = 0;
    return 0;
}

は単なるテストdolzinaではなく、最初に 0 に設定します。これにより、else節が実行されますがdolzina、期待される結果ではない 0 に等しくなります。

==もちろん、比較するために使用する必要があります。

于 2013-03-28T08:38:57.647 に答える