0

構造体とポインターを使用して、2 つの有理数の加算、乗算、除算を求めるプログラムを作成していました。ポインタで数字を入力するのに問題があります。コードをどのように修正すればよいですか? ありがとう!

#include <stdio.h>
struct rational
{
    int nu;
    int de;
}*p1,*p2,*p3;
void add()
{
    p1->nu = p1->nu*p2->de + p1->de*p2->nu;
    p3->de = p1->de * p2->de;
    printf("%d\n--\n%d\n",p3->nu,p3->de);
}
void multiply()
{
    p3->nu = p1->nu * p2->nu;
    p3->de = p1->de * p2->de;
    printf("%d\n--\n%d\n",p3->nu,p3->de);
}
void divide()
{
    p3->nu = p1->nu * p2->de;
    p3->de = p1->de * p2->nu;
    printf("%d\n--\n%d\n",p3->nu,p3->de);
}
int main()
{
    int a,b,c,d,choice;
    printf("Enter the first rational number.\n");
    scanf("%d%d",&a,&b);
    p1->nu = a;
    p1->de = b;
    printf("Enter the second rational number.\n");
    scanf("%d%d",&c,&d);
    p2->nu = c;
    p2->de = d;
    scanf("%d",&choice);
    switch (choice)
    {
        case 1: add();
                break;
        case 2: multiply();
                break;
        case 3: divide();
                break;
    }
    return 0;
}
4

3 に答える 3

1

ポインターを初期化しないため、提供するコードは未定義の動作を呼び出します。p1、p2、および p3 を実際に使用する前に、既存のオブジェクトを指すようにするか、動的にメモリを割り当てます。

于 2013-04-20T16:01:30.673 に答える