1

次のコードを実行すると、常に浮動小数点例外が発生します。どうすれば修正できますか?

    #include <stdio.h>

    //Global Variables

    int num, denom, num1, denom1;

    void simplify(int *numerator, int *denominator);

    int main () {

    //Prompt User as to what program is
    printf("Fraction Simplifier\n");
    printf("===================\n");

    //Ask User for Numerator and Denominator
    printf("Numerator: ");
    scanf("%d", &num);
    printf("Denominator: ");
    scanf("%d", &denom);

    //Call Function
    simplify(&num1, &denom1);

    //Display final output
    printf("%d / %d = %d / %d", num, denom, num1, denom1);

    return 0;
    }

    //Simplify function
    void simplify(int *numerator, int *denominator)
    {

    num = num1;
    denom = denom1;

    num1 = num1 / num1;
    denom1 = denom1 / num1;
    num1 = *numerator;
    denom1 = *denominator;

    }
4

2 に答える 2

1

初期化されていないように見えnum1ます。ゼロになり、ゼロによる除算になります。

于 2012-10-24T23:21:12.010 に答える
0

あなたのsimplify機能には欠陥があります。を呼び出すときの意味は次のsimplifyとおりです。

num1 と denom1 のアドレスを渡して、simplify を呼び出します。

そして、simplify 内のコードの意味は次のとおりです。

num = num1;          /* Assign the value of num1 to num, meaning set num to 0. */
denom = denom1;      /* Assign the value of denom1 to denom, meaning set denom to 0. */
num1 = num1 / num1;  /* Divide num1 (which is 0) by num1 (which is 0). Error! */

グローバル変数を削除することで、プログラムを単純化し、理解しやすくすることができます。これは、エラーを修正するのにも役立ちます。ここに書き直します:

#include <stdio.h>

void simplify(int numerator, int denominator, int* newNumerator, int* newDenominator);

int main () {

    int num, denom, num1, denom1;

    /* Do your input code */

    //Call Function
    simplify(num, denom, &num1, &denom1);

    //Display final output
    printf("%d / %d = %d / %d", num, denom, num1, denom1);

    return 0;
}

//Simplify function
void simplify(int numerator, int denominator, int* newNumerator, int* newDenominator)
{
    int simplifiedNumerator;
    int simplifiedDenominator;

    /* Calculate your results.. left out your original code, which calculates incorrectly */
    /* You will refer to the ints numerator and denominator */

    /* Assign your results */
    *newNumerator = simplifiedNumerator;
    *newDenominator = simplifiedDenominator;
}

simplify4 つのパラメーターがあることに注意してください。最初の 2 つは、計算で使用する値です (ポインターは必要ありません)。ポインターは、渡されたアドレスに結果を割り当てるためにのみ使用されます。

于 2012-10-24T23:34:55.477 に答える