-1

ポインターを使用して、ITOA (整数から配列) 関数を作成しようとしています。

これが私がこれまでに得たものです。デバッグしましたが、問題なく動作します。問題は、印刷自体が機能しないことです。2 つのスクリーンショットを追加しています。

助けていただければ幸いです。

int num_length(int number)
{
    int count = 0;

    while (number > 0)
    {
        count++;
        number /= 10;
    }

    return count;
}

void itoa(int number, char *strptr)
{
    int number_len = num_length(number);
    char *start = strptr;
    strptr += number_len - 1;

    while (strptr >= start)
    {
        *strptr = number % 10;
        number /= 10;
        strptr--;
    }
}

void print_string(char *strptr)
{
    while (*strptr != '\0')
    {
        printf("%c", *strptr);
        strptr++;
    }
}

void main(void)
{
    int number;
    char number_in_string[N] = { '\0' };
    char *strptr = &(number_in_string[0]);
    printf("Enter a number: ");
    scanf_s("%d", &number);

    itoa(number, strptr);

    print_string(number_in_string);
    getch();
}

4

1 に答える 1

2

数字の配列を取得しようとしている場合( print_string(a)関数で明らかなように)、値を適切に調整する必要があります。

*strptr = number % 10 + '0';

デバッグ出力 ( '\x2''\x5''\x5') に従って、数字の個々の数字を正しく取得していますが、それらはバイナリ値であり、文字表現ではありません。

前者を後者に変えるには、追加'0'が必要です (たとえば、ASCII を使用している場合は 0x30)。C は数値が連続していることを保証するので、これは安全です。


(a) ...ちなみに、これは単純なものに置き換えることができます:

printf("%s", number_in_string);

あなたのmain機能で。

于 2016-10-14T11:41:47.523 に答える