2017-08-09 14 views
-2

メニューを印刷して演算子をcharとして受け取る単純な数式の式を実行したいと考えています。次に、ユーザーに2つの数字の入力を促し、その結果の質問を印刷して、10 + 20 = 30のような形式で応答します。SwitchステートメントのC++数式

#include <iostream> 
#include <cstdio> 

using namespace std; 

int main() 
{ 
    //Variables 
    char op_choice; 
    int usrnum_1; 
    int usrnum_2; 

    //Menu 
    cout << "Operator Menu\n\n"; 
    cout << "+\n"; 
    cout << "-\n"; 
    cout << "*\n"; 
    cout << "/\n"; 
    cout << "%\n\n"; 

    cout << "Choice:"; 
    cin >> op_choice; 
    cout << "\nNumbers:"; 
    cout << "\n\nEnter TWO numbers to complete an arithmitic operation with the " << op_choice << " operator: \n"; 
    cout << "eg: 1 + 2 = 3\n"; 
    cout << "\nNumber 1: "; 
    cin >> usrnum_1; 
    cout << "Number 2: "; 
    cin >> usrnum_2; 

    switch (op_choice) 
    { 
     case '+': 
      break; 
     case '-': 
      cout << "\nYou picked " << usrnum_1 << " - " << usrnum_2 << " = "; 
      cout << usrnum_1 - usrnum_2; 
      break; 
     case '*': 
      cout << "\nYou picked " << usrnum_1 << " X " << usrnum_2 << " = "; 
      cout << usrnum_1 * usrnum_2; 
      break; 
     case '/': 
      cout << "\nYou picked " << usrnum_1 << "/" << usrnum_2 << " = "; 
      cout << usrnum_1/usrnum_2; 
      break; 
     case '%': 
      cout << "\nYou picked " << usrnum_1 << " % " << usrnum_2 << " = "; 
      cout << usrnum_1 % usrnum_2; 
      break; 
     default: 
      cout << "\nYou made an illegal choice.\n"; 
    } 

    cout << "\nYou picked " << usrnum_1 << " " << op_choice << " " << usrnum_2 << " = "; 
    cout << usrnum_1 << op_choice << usrnum_2; 

    getchar(); 
    return 0; 
} 

あなたは減算、乗算などから見ることができるように私は実際に働いて、このコードを持っているしかし、私は(私が始めたとアドオンでテストしていた)スイッチブロックの外側COUTを取得するために探しています。 op_choiceを元のintにしなくてもこの作業を行う方法はありますか?または、スイッチブロックにcout文を入れますか? if-else-if文を使用する方が良いでしょうか?

+1

?演算子の文字とユーザーが入力した値はすでに格納されています。switch文では、計算を実行して値を格納し、最後に1つのcoutのみを使用して出力します。 –

+0

数値演算の結果を 'switch'の外側に表示したいのですか?どのように変数に格納し、それを印刷するのですか? –

+1

他のコメントのより一般的な定式化:結果の表示と結果の計算を分けます。 – molbdnilo

答えて

2

まず、switchは、この種のコードのための最良のコード構成です。

cout << usrnum_1 + usrnum_2; 
  1. 私は最初の問題がクリアされている願っています:

    問題はユニバーサル出力のあなたの概念

    cout << usrnum_1 << op_choice << usrnum_2; 
    

    はあなたがやりたい計算に近いものになることができないということですこれらの線がお互いに接近しているのが見えます。その後、op_choiceそして最後にusrnum_2

    1. 最初の版画usrnum_1:彼らは単に別のことを行います。魔法は発生しません。op_choiceは、印刷されるのはcharです。
    2. もう1つは、usrnum_1 + usrnum_2(演算子はビットシフトよりもhigher priorityです)を追加して、加算結果を出力します。
  2. 秒、より重要な問題は、コンパイル言語なのでchar op_choice = '+'(ランタイムでセット)が容易にC++コードで算術演算子+になることができないことです。 コンパイラは式a + bを受け取り、それを整数加算用の機械命令に変換します。 コンパイルされたプログラムは、明示的に(switchを使用して、好ましくは)指示するまで、整数の追加命令が数字43(ASCIIコード+)に何らかの関係があるとは考えていません。

どのように動作させるには?コメント者が示唆しているように、計算をswitchブロックに保存し、プリント部分のみをブロックから取り除かなければなりません。あなただけの答えを格納する変数を持っていないのはなぜ

int result; 

switch (op_choice) 
{ 
    case '+': 
     result = usrnum_1 + usrnum_2; 
     break; 
    case '-': 
     result = usrnum_1 - usrnum_2; 
     break; 
    case '*': 
     result = usrnum_1 * usrnum_2; 
     break; 
    case '/': 
     result = usrnum_1/usrnum_2; 
     break; 
    case '%': 
     result = usrnum_1 % usrnum_2; 
     break; 
    default: 
     cout << "\nYou made an illegal choice.\n"; 
     return 1; 
} 

cout << "\nYou picked " << usrnum_1 << " " << op_choice << " " << usrnum_2 << " = "; 
cout << result; 

Online demo of the program

関連する問題