0

このプログラムを実行してみましたが、入力した数字は非常に大きな数字として出力されます。数学計算用のヘッダーを追加する必要がありますか? または、C++ の printf 関数である C のようなものはありますか?

#include <iostream>                                                     // Necessary 
using namespace std;
#define mMaxOf2(max, min) ((max) > (min) ? (max) : (min))
#define mMaxOf3(Min, Mid, Max)\
{\
     mMaxOf2(mMaxOf2((Min), (Mid)),(Max))\
}

int main()
{
    double primary;
    double secondary;
    double tertiary;
    long double maximum = mMaxOf3(primary, secondary, tertiary);

    cout << "Please enter three numbers: ";
    cin >> primary >> secondary >> tertiary;
    cout << "The maximum of " << primary << " " << secondary << " " << tertiary;
    cout << " using mMaxOf3 is " << maximum;


    return 0;
}
4

4 に答える 4

2

maximum問題は、ユーザーの入力を取得する前に計算していることです。次のようにコードを再配置します。

    double primary;
    double secondary;
    double tertiary;
    long double maximum;

    cout << "Please enter three numbers: ";
    cin >> primary >> secondary >> tertiary;

    maximum = mMaxOf3(primary, secondary, tertiary);

    cout << "The maximum of " << primary << " " << secondary << " " << tertiary;
    cout << " using mMaxOf3 is " << maximum;

コードは順番に実行されること、または行ごとに実行されること常に覚えておいてください。C++ の場合、変数を変更すると、変更された変数を使用する以降の命令の動作に影響します。あなたの場合、で必要なとの値を適切に設定する前にmaximum、最初に計算しました。primarysecondarytertiarymMaxOf3

primary注意として、プログラムの場合、 、secondarytertiaryおよびmaximumが初期化されていない値を持っていてもまったく問題ありません。

于 2012-10-22T05:46:44.560 に答える
1

これ:long double maximum = mMaxOf3(primary, secondary, tertiary);直後に行く必要がありますcin >> primary >> secondary >> tertiary;

あなたが抱えている問題は、初期化されていない変数にアクセスしていることです。それらを読み込んだ後、それらにアクセスする必要があります。

于 2012-10-22T05:45:21.357 に答える
1

cin ステートメントが 1 次、2 次、および 3 次の値を設定する前に、最大値を計算します。

于 2012-10-22T05:45:49.427 に答える
1

「プライマリ」を初期化していないsecondarytertiary、呼び出しの前にmMaxOf3数値にガベージ値が含まれているため、ガベージ回答が得られます。数値を入力した後、最大値を計算する必要があります。また、std::maxマクロの代わりとして見てください

于 2012-10-22T05:47:38.070 に答える