0

所以我让这个程序运行,但现在我输入的任何数字都变成了非常大的数字。我需要为数学计算添加标题吗?还是有类似 C 的东西,C++ 的 printf 函数?

#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和具有未初始化的值是完全可以的。secondarytertiarymaximum

于 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 语句设置primary、secondary 和tertiary 的值之前计算最大值。

于 2012-10-22T05:45:49.427 回答
1

您尚未初始化“主要”,secondary或者tertiary在您调用之前,mMaxOf3因此数字包含垃圾值,因此您得到垃圾答案。您需要在输入数字后计算最大值。另外,看看std::max作为你的宏的替代品

于 2012-10-22T05:47:38.070 回答