2014-04-02 61 views
-2

這是我的第一個C++程序。我似乎無法驗證我的ValidateInput函數中的op變量的內容,有人可以解釋我做錯了什麼,並給我指針來編寫乾淨的代碼!C++中的計算器

#include <iostream> 
using namespace std; 

int Addition(int number1, int number2) 
{ 
    int add = number1 + number2; 
    return add; 
} 

int Subtraction(int number1, int number2) 
{ 
    int subtract = number1 - number2; 
    return subtract; 
} 

int Multiplication(int number1, int number2) 
{ 
    int multiply = number1 * number2; 
    return multiply; 
} 

int Modulo(int number1, int number2) 
{ 
    int mod = number1 % number2; 
    return mod; 
} 

int Division(int number1, int number2) 
{ 
    int divide = number1/number2; 
    return divide; 
} 

int ValidateInput(int number1, string op, int number2) 
{ 
    if (cin.fail()) { 
     return false; 
    } 
    if (cin.good()) { 
     return true; 
    } 
} 

int main() 
{ 
    int number1, number2; 
    string op; 

    cout << "C++ Calculator\n\n"; 
    cout << "Enter number 1: ", cin >> number1; 
    cout << "Enter operator(+, /, %, *, -): ", cin >> op; 
    cout << "Enter number 2: ", cin >> number2; 

    if (ValidateInput(number1, op, number2) == false) { 
     cout << "FALSE"; 
    } 

    else if (ValidateInput(number1, op, number2) == true) { 
     //Input seems ok 
     if (op == "+") { 
      cout << Addition(number1, number2); 
     } 
     else if (op == "-") { 
      cout << Subtraction(number1, number2); 
     } 
     else if (op == "/") { 
      cout << Division(number1, number2); 
     } 
     else if (op == "*") { 
      cout << Multiplication(number1, number2); 
     } 
     else if (op == "%") { 
      cout << Modulo(number1, number2); 
     } 
     else { 
      cout << "Invalid operator"; //ValidateInput function doesn't seem to notice if operator input is valid or not 
     } 
    } 
} 

而當它檢測到無效無效時,它仍會在結束前經歷整個程序。 error_msg

+1

您還沒有編寫任何代碼來驗證運算在上面的例子。如果你嘗試了一些不起作用的代碼,你可以發佈它嗎? – balki

+0

據我所知ValidateInput cin檢查所有參數 – CrackSmoker9000

+1

有人可以澄清語法:'cout << foo, cin >> bar;'?什麼是逗號? –

回答

1

在你已經讀過它之後驗證流狀態是一個壞主意。

一個很好的成語使用的是:

int i; 
if(!(std::cin >> i)) { 
    std::cout << "Error reading input" << std::endl; 
} 

這將檢查是否閱讀和格式化輸入的號碼成功。檢查fail不會這樣做。

您的驗證功能檢查變量的實際內容沒有,他們發起的(可能溢出給予一定的操作,是op字符串中的預期範圍等)

1

是不是Division應該返回floatdouble而不是int正確的結果?

+0

如果你不至少投入一個操作數,你仍然會得到整數除法。 – DuncanACoulter

+0

是的。我正在考慮'int'的劃分缺陷,但我的想法出錯了。謝謝。 –

1

改變此密碼

cout << "Enter number 1: ", cin >> number1;   // ',' is not valid use ';' 
cout << "Enter operator(+, /, %, *, -): ", cin >> op; 
cout << "Enter number 2: ", cin >> number2; 

cout << "Enter number 1: "; 
cin >> number1; 
cout << "Enter operator(+, /, %, *, -): "; 
cin >> op; 
cout << "Enter number 2: "; 
cin >> number2; 
+0

爲什麼? ','是有效的,對我來說工作正常 – CrackSmoker9000

+0

我不認爲它的有效語法,但如果它爲你工作,那麼它的好處。 – Himanshu