2016-07-20 4 views
0

プログラムは、ユーザーにenter関数の分子と分母を要求します。その後、簡略化して表示する必要があります。 私はそれを実行しようとし、私のプログラムが壊れました。structsが新しく、私のプログラムはどうやって動いていないのですか?

これを行う方法に関するヒントを教えてください。

私はまだ構造体の作り方を学んでいます。

#define _CRT_SECURE_NO_WARNINGS 
    #include <stdio.h> 

    struct Fraction 
    { 
     int numerator; 
     int denominator; 
    }; 

    void enter(struct Fraction *choice) 
    { 
     printf("Numerator: \n"); 
     scanf("%d", choice->numerator); 

     printf("Denominator: \n"); 
     scanf("%d", choice->denominator); 
    } 

    void simplify(struct Fraction *reduce) 
    { 
     reduce->numerator = reduce->numerator/reduce->numerator; 
     reduce->denominator = reduce->denominator/reduce->denominator; 
    } 

    void display(const struct Fraction *show) 
    { 
     printf("%d/%d", show->numerator, show->denominator); 
    } 

    int main(void) 
    { 
     struct Fraction f; 

     printf("Fraction Simplifier\n"); 
     printf("===================\n"); 

     enter(&f); 
     simplify(&f); 
     display(&f); 
    } 
+1

'のscanf(」 %d "、&choice-> numerator); ... scanf( "%d"、&choice->分母); ' – BLUEPIXY

+0

' simplify'はGCMで除算されます。 – BLUEPIXY

+0

'私はそれを実行しようとしましたが、プログラムが壊れました。将来発生する実際のエラーを指定してください。 – KevinDTimm

答えて

2

通報1

scanf("%d", choice->numerator); 
    scanf("%d", choice->denominator); 

をする必要があります

scanf("%d", &choice->numerator); 
    scanf("%d", &choice->denominator); 
    //   ^^ Missing 

通報2

次の行:

reduce->numerator = reduce->numerator/reduce->numerator; 
    reduce->denominator = reduce->denominator/reduce->denominator; 

が同等である:

reduce->numerator = 1.0; 
    reduce->denominator = 1.0; 

あなたは分子と分母のGCDを計算し、次に使用するコードが必要になります。

double gcd = get_gcd(reduce->numerator, reduce->denominator); 
    reduce->numerator = reduce->numerator/gcd; 
    reduce->denominator = reduce->denominator/gcd; 
関連する問題