1

私は単純なピタゴラス関数を実行しています。ユーザーは2つの数値を入力し、両方の数値はHypoと呼ばれるユーザー定義関数に送られ、hypoは1つの値Cを返すことになっています。これが答えです。

これが私のスクリプトです。

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

int hypo(double a, double b);

int main(void)
{ 
   double one, two;
   //user inputs two variables
   scanf("%lf %lf", &one, &two );
   printf("Your C number is: %.2lf\n", hypo(one, two));

   system("PAUSE"); 
   return 0;
}

/*-------------------------------------------------------------------------*/

int hypo(double a, double b)
{
    double c;
    c = sqrt((a*a)+(b*b));
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c);

    return c;
}

私のコンピューターでは、最後まで機能します。Returnc; これは、何らかの理由で、値0をMain関数に返します。(エラーがどこにあるかを確認するためにテストしたため、hypo関数の印刷画面が表示されます。)

これを理解したい。

シナクスが間違っているか、まだ読んでいないものが頭に浮かんだと確信していますが、本を読んでYouTubeビデオをチェックした後、なぜこれが機能しないのかわかりません。 。

編集:

迅速な返信ありがとうございます!私はそれをダブルに変更しました(プロセスでの私の間違いもxDに気づきました)、そしてそれは今では魅力のように機能します。皆さんがどれだけ速く答えたかにとても満足しています、私はそれを確実に転送します:)

4

4 に答える 4

2

戻り値のタイプはint、おそらく必要な場合です。double小さな値がキャストされ、結果は0になります(つまり、に格納されている場合、0.5は0ですint)。

0を取得する正確な理由は、フォーマットの不一致です。floatフォーマットを使用して整数値を出力します。整数を出力するには、を使用%dしますが、return typeをhypo正しく指定すると(double)、この問題は解消されます。

于 2013-03-05T22:11:47.500 に答える
2

リターンタイプをdoubleに変更する必要があります。

double hypo(double a, double b)
{
    double c;
    c = sqrt((a*a)+(b*b));
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c);

    return c;
}
于 2013-03-05T22:12:11.507 に答える
1

hypo返しましたintが、それをのように使用していますdouble。次のように切り替える必要があります。

double hypo(double a, double b);

そして、実装では:

double hypo(double a, double b)
{
    double c;
    // ...

として返すとint、結果の値は完全な値を表示する代わりにc切り捨てられます。intこれにより、1.0未満の正の数の場合は0に変換されます。また、フォーマット文字列がdoubleを指定していて、intを渡すと、ディスプレイに常に間違った答えが出力されます。

于 2013-03-05T22:11:10.153 に答える
1

変数cをdouble型として定義しました。

double c;

intしかし、あなたは:を返そうとしています。

int hypo(double a, double b);

のリターンタイプをに変更するか、にキャストする必要hypodoubleありcますint。ただし、キャストすると分数が破棄されます(2.678が2になります)。

return (int)c;

したがって、代わりに戻りタイプをに変更することをお勧めしますdouble。これは、斜辺(小数桁が含まれる場合があります)を計算する場合にも論理的です。

double hypo(double a, double b);
于 2013-03-05T22:11:44.393 に答える