0

私は代数アプリケーションに取り組んでいます。これがコードです

struct quotient
{
    int numerator;
    int denominator;
};

struct term
{
    struct quotient coefficient;
    char varname;
    struct quotient power;
};

struct function
{
    struct term* terms;
    char* operators;
    struct quotient coefficient;
    struct quotient power;
};

//Constructor Functions
struct quotient NewQuotient()
{
    struct quotient temp;
    printf("Enter the numerator\n");
    scanf("%d", &temp.numerator);
    printf("Enter the denominator\n");
    scanf("%d", &temp.denominator);
    return temp;
}

char NewVarname()
{
    char temp;
    printf("Enter the variable letter: \n");
    scanf("%c", &temp);
    return temp;
}

struct term NewTerm()
{
    //broken, won't let you enter a variable name, sets it to x by default until that's     resolved
    struct term temp;
    printf("Enter the coefficient: ");
    temp.coefficient = NewQuotient();
    printf("Enter the variable name: \n");
    temp.varname = NewVarname();
    temp.varname = 'x';
    printf("Enter the power: ");
    temp.power = NewQuotient();
    return temp;
}

void NewFunction(struct function* func, int size)
{
    //so far so good
    unsigned i;
    func->terms = (struct term*)calloc(size, sizeof(struct term));
    //loop to initialize each term
    for(i = 0; i < size; i++)
    {
        func->terms[i] = NewTerm();
    }
    return;
}

int main(){
    struct function fofx;
    NewFunction(&fofx, 2);
    DisplayFunction(&fofx, 2);
    DeleteFunction(&fofx);

    return 0;
}

出力は次のとおりです。

分子を入力してください:
1分母を入力してください
:
2
分子を入力してください:
3分母を
入力してください:
4
....

など、ループの最後まで。

NewTerm のステートメントの半分はまったく実行されていないように見えますが、プログラムは新しい関数の割り当てと初期化に成功しているようです。どんな助けでも大歓迎です、私はこれについて非常に混乱しています。表示機能と削除機能は含めませんでしたが、問題なく動作しますが、役立つ場合はここに追加できます。

4

3 に答える 3

1

calloc に適切なサイズを指定していませsizeof (struct term)sizeof (int)。の実際のサイズstruct termと の値によっては、これが問題になる可能性がありますsize

呼ばNewTermれていないということは、おそらくあなたが呼んでいないからでしょう。

于 2012-07-19T03:14:12.710 に答える
1

を使用する場合scanf、通常、数値だけでなく Return キーも取得する必要があります。

あなたが持っている:

scanf("%d", &temp.numerator);

あなたが本当に欲しいもの:

scanf("%d\n", &temp.numerator);
于 2012-07-21T00:39:08.003 に答える
0

また、バリデーションを使用して、数値のみが入力されていることを確認する必要があります。そうしないと、おかしな結果が得られます。

于 2012-07-21T01:39:07.950 に答える