1

わかりました、これは私の宿題です。しかし、誰もが「理解してください」と言う前に、私はプログラムを機能させました。整数の完全な10文字で機能しない理由がわかりません。宿題は、ユーザーに整数を入力するように求めます。1 つのスイッチを使用して、数値を 1 つの整数語で出力します (26 は 2 6 になります)。私はそれを機能させることができます。私が抱えている問題は、出力される整数として 1-0 を入力すると、「1 2 3 4 5 6 7 8 0 0」になります。1-9 と入力すると、「1 2 3 4 5 6 7 9 9」と表示されます。1-8 と入力すると、問題なく動作します。ここで何が問題なのかわかりません。これが私のコーディングです。

#include <stdio.h>

int main(void)
{
    int num, num2, integer, decimal_place, length, sum;
    float multiplier, integer_length, avg;

    printf("\nPlease enter an integer: ");
    scanf("%d", &num);
    printf("\n");

    printf("\tYou have entered:\n\n\t");
    if (num < 0)
    {
        printf("negative ");
        num *= -1;
    }

    num2 = num;
    length = 1;
    sum = 0;
    integer_length = 0;


    // Get the length of the input
    while (num2 > 9)
    {
        length++;
        num2 /= 10;
    }

    for (integer = length; integer > 0; integer--)
    {
        multiplier = 10;

        for (decimal_place = integer; decimal_place > 0; decimal_place--)
        {
            multiplier *= 0.1;
        }

        num2 = num * multiplier;
        num2 %= 10;

        switch(num2)
        {
            case 0:
                printf("zero");
                sum += 0;
                break;
            case 1:
                printf("one");
                sum += 1;
                break;
            case 2:
                printf("two");
                sum += 2;
                break;
            case 3:
                printf("three");
                sum += 3;
                break;
            case 4:
                printf("four");
                sum += 4;
                break;
            case 5:
                printf("five");
                sum += 5;
                break;
            case 6:
                printf("six");
                sum += 6;
                break;
            case 7:
                printf("seven");
                sum += 7;
                break;
            case 8:
                printf("eight");
                sum += 8;
                break;
            case 9:
                printf("nine");
                sum += 9;
                break;
        }

        printf(" ");
    }

    while ( num > 0 )
    {
        num /= 10.00;
        integer_length++;
    }


    avg = sum / integer_length;
    printf("\n\nThe sum of the individual integers is: %d\n", sum);
    printf("The average is: %.2f", avg);

    printf("\n\n");

    return 0;
}

どんな助けでも大歓迎です。

4

2 に答える 2

1

float乗数は、わずか 24 ビット (約 7 桁) の精度で計算します。そのため、約 6 桁を超える数値がある場合、桁を抽出するときに丸めエラーが発生します。

于 2013-11-09T00:07:09.653 に答える