c ++:为什么它总是先做最后一个参数?

时间:2017-03-01 20:57:02

标签: c++

所以我只是使用函数编写一个简单的计算器,我想尽可能地使用它。我基本上想要它在一行代码中你可以完成询问数字和计算以及计算结果的整个过程。但我有问题。在下面的代码中,当我在main函数中执行时 “cout<< calculate(askCalculation(),askNumber1(),askNumber2())<< endl;” 然后我运行程序然后我希望它首先询问计算,然后是第一个数字,然后是第二个数字。但它并没有这样做,事实上它是以精确的对立方式做到的。是有原因的,我该如何解决这个问题?

哦,请知道你可以将3问题功能放在1个课程中,使其更加简单,但有没有办法可以将计算函数放在同一个类中?

#include <iostream>

using namespace std;

int calculate(int calculation, int firstNumber, int lastNumber)
{
    switch(calculation)
    {
    case 1:
        return firstNumber + lastNumber;
        break;
    case 2:
        return firstNumber - lastNumber;
        break;
    case 3:
        return firstNumber * lastNumber;
        break;
    case 4:
        return firstNumber / lastNumber;
        break;
    }
}
int askNumber1()
{
    int a;
    cout << "Give the first number" << endl;
    cin >> a;
    return a;
}
    int askNumber2()
{
    int b;
    cout << "Give the second number" << endl;
    cin >> b;
    return b;
}
int askCalculation()
{
    int c;
    cout << "what calculation do you want to do? add (1) subtract (2) multiplication (3) divide (4)" << endl;
    cin >> c;
    return c;
}
int main()
{
    cout << calculate(askCalculation(), askNumber1(), askNumber2()) << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

函数参数的评估顺序未在C或C ++中定义。如果需要特定的顺序,请按照所需的顺序将这些函数的返回值分配给命名变量,然后将这些变量传递给函数:

int a = askCalculation();
int b = askNumber1();
int c = askNumber2();
cout << calculate( a, b, c ) << endl;