-4

昨夜、練習用に作成しようとしている三角関数計算機について質問しましたが、前回の質問にかなり関連する質問で再び戻ってきました。昨夜から電卓を修正しましたが、何らかの奇妙な理由で、if ステートメントの 1 つが別の if ステートメントに対して与えられたテストに合格しています。これが私が持っているコードです-

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int x;
float o, h, a, S, C, T;
enum { sine, cosine, tangent};

printf("Enter the value for the function you wish to calculate\n(Sine = 0 Cosine = 1  Tangent = 2): ");
scanf("%f", &x);

if(x == 0)
{
    printf("Enter the value of the opposite leg: ");
    scanf("%f", &o);
    printf("Enter the value of the hypotenuse: ");
    scanf("%f", &h);

    S = o / h;
    printf("The sine is equal to %f", S);
}

else if(x < 2, x > 0)
{
    printf("Enter the value of the adjacent leg: ");
    scanf("%f", &a);
    printf("Enter the value of the hypotenuse: ");
    scanf("%f", &h);

    C = a / h;
    printf("The cosine is equal to %f", C);
}

else if(x == 2)
{
    printf("Enter the value of the opposite leg: ");
    scanf("%f", &o);
    printf("Enter the value of the adjacent leg");
    scanf("%f", &a);

    T = o / a;
    printf("The tangent is equal to %f", T);
}
else
{
    printf("Wat da fack");
}

return 0;


}  

何が起こるかというと、タンジェントのコサイン テストに合格し、タンジェント関数が機能しません。前と同じように、私はまだこれにかなり慣れていないので、気楽に行ってください..ところで、コサインの2つのテスト条件があるのは、そのようにしない限り実行されないからです。それも。

4

3 に答える 3

4

if (x < 2, x > 0)あなたが思うことをしません。それはあるべきif (x<2 && x>0)です; Cコンマ演算子について読む

また、すべての警告とデバッグ情報 (たとえばgcc -Wall -g) を使用してコンパイルした場合、おそらく警告が表示されます。また、デバッガーの使用方法を学習する必要があります ( gdbLinux など)。

コンパイラ (少なくとも GCC) はscanf("%f", &x);where xis someに対して警告するはずですint。おそらく必要scanf (" %d", &x);であり、結果をテストしたい場合がありますscanf(正常に読み取られた要素の数が得られます)。

おそらく、すべてprintfのフォーマット文字列を改行で終了する必要があります(コードprintf("Enter the value of the opposite leg:\n");など)-または、非常に頻繁に呼び出す必要があります-フォーマット文字列に次のようfflushにスペースを入れることをお勧めしますscanfscanf(" %f", &a)

于 2012-12-31T08:25:46.640 に答える
2

他の人が言ったように、問題はあなたの2番目のelse if()ステートメントにあるようです。基本的に何が起こっているのかというと、両方のステートメントx < 2x > 0が実行されますがx > 0、条件をテストするためにのみ使用されています。したがって、コサイン関数のテストはタンジェント関数、つまりcosine > 0、にも合格し、タンジェント関数tangent > 0のテストは実行されません。

比較を実行するためのより良い方法は、テストするか、x == 1または使用できるかどうかをテストすることです。else if(x > 0 && x < 2)

于 2012-12-31T08:53:56.937 に答える
2

では、 がであるためscanf("%f", &x);に置き換えますが、これは大きな問題ではありません。%f%dxint

問題はifステートメント状態にあり、

comma(,)使用目的ではなく、使用しANDなければならない&&、、という状態になり、

if ((x < 2) && (x > 0))

編集

ユーザーから取っているときはinに置き換え%fてください...%dscanfx

scanf("%d", &x);これで問題が解決します。

于 2012-12-31T08:31:19.263 に答える