0

私は代数アプリケーションに取り組んでいます。これは、グラフ電卓でできることと非常によく似ています。

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()
{
    struct term temp;
    printf("Enter the coefficient: ");
    temp.coefficient = NewQuotient();
    printf("Enter the variable name: \n");
    temp.varname = NewVarname();
    printf("Enter the power: ");
    temp.power = NewQuotient();
    return temp;
}

プログラムは係数とべき乗の商を取得しますが、変数名の取得に問題があります。NewQuotient の scanf ステートメントの後にバッファにヌル文字が残っていると思いますが、ある場合、それらを見つける方法や修正する方法がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

2

一般的に、とscanfはうまくいきませんgets。同じプログラムで両方を使用するのは簡単ではありません。あなたの場合、ユーザーが2文字を入力している間、scanf正確に1文字( )を読み取ります -と.xxend-of-line

end-of-line文字が入力バッファに残っているため、次のことが発生します。ユーザーが何も入力する時間がなくても、あなたの場合はすぐに到着するように見えるgets最も近い文字まで入力を読み取ります。end-of-line

これを修正するには、次のいずれかを使用してすべての入力を行いgetsますscanf


最初のオプション

struct term NewTerm()
{
    ....
    // Old code:
    // scanf("%c", &temp.varname);

    // New code, using gets:
    char entry[MAX];
    gets(entry);
    temp.varname = entry[0];
    ....
}

2 番目のオプション

struct quotient NewQuotient()
{
    ....
    // Old code
    // gets(entry);

    // New code, using scanf:
    int x, y;
    scanf("%d/%d", &x, &y);
    ....
}

ところで、最初のオプションを選択した場合は、 gets の代わりに fgets を使用する必要があります

于 2012-07-15T18:23:03.843 に答える