2017-03-01 4 views
1

だから、僕は関数を使用して簡単な電卓を書いて​​いたし、私は簡単に可能な限り使用することを望んでいました。私は基本的に、1行のコードで、数値を求めたり、計算をしたり、結果を計算したりする全プロセスを実行できるようにしたいと考えました。しかし、私は問題があります。下のコードで、私がメイン関数で行うとき "cout < < calculate(askCalculation()、askNumber1()、askNumber2())< < endl; は、と私はそれが最初の計算は、最初の数と2番目の番号をお願いしたいと思いますし、プログラムを実行します。しかしそれはそうしません、実際には反対の形でそれを行います。理由があるのですが、どうすれば修正できますか?C++:なぜ、常に最後のパラメータを最初に行うのですか?

ああとplsは私はあなたがちょうどそれがさらに簡単にするために1クラスの目的球を尋ねる3を入れることができます知っているが、私はその同じクラスで計算目的球を置くことができる方法はありますか?

#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; 
} 

答えて

2

関数のパラメータの評価順序は、CまたはC++では定義されていません。特定の注文が必要な場合は、これらの関数の戻り値を名前付き変数に必要な順番で割り当て、関数に渡します。

int a = askCalculation(); 
int b = askNumber1(); 
int c = askNumber2(); 
cout << calculate(a, b, c) << endl; 
関連する問題