2016-02-03 2 views
0

Здравствуйте, я пытаюсь создать консольное приложение, которое позволяет пользователю вводить один символ для предварительной арифметической операции.C++ вызов различных методов при вводе char

В настоящее время программа только добавляет два числа вместе, даже если я вводим m, что означает умножение. Я полагаю, что по какой-то причине он идет прямо в первый оператор if, даже если я не хочу добавления.

#include <iostream> 
using namespace std; 

int add(int a, int b) 
{ 
    int c; 
    c = a + b; 
    return c; 
} 
int subtract(int a, int b) 
{ 
    int c; 
    c = a - b; 
    return c; 
} 
int multiply(int a, int b) 
{ 
    int c; 
    c = a * b; 
    return c; 
} 
int divide(int a, int b) 
{ 
    int c; 
    c = a/b; 
    return c; 
} 
int remainder(int a, int b) 
{ 
    int c; 
    c = a % b; 
    return c; 
} 

int main() 
{ 
    int a; 
    int b; 
    char op; 

    cout << "****************Integer Calculator**************** " << endl << "Press enter to continue." << endl; 


    cout << "Enter the first integer: " << endl; 
    cin >> a; 
    cout << "Enter the second integer: " << endl; 
    cin >> b; 

    cout << "What operation would you like to perform? Enter a single character " << endl << "Add - A , a or + " << endl << 
     "Subtract - S , s or - " << endl << "Multiply - M , m or * " << endl << "Divide - D , d or/" << endl << "Remainder - R , r or % " << endl; 
    cin >> op; 

    if (op ='A' || 'a' || '+') 
    { 
     int answer1 = 0; 
     answer1 = add(a, b); 
     cout << "The answer is: " << answer1 << endl; 
     system("PAUSE"); 
     return 0; 
    } 
    else if(op == 'S' || 's' || '-') 

    { 
     int answer2 = 0; 
     answer2 = subtract(a, b); 
     cout << "The answer is: " << answer2 << endl; 
     system("PAUSE"); 
     return 0; 
    } 
    else if (op == 'M' || 'm' || '*') 
    { 
     int answer3 = 0; 
     answer3 = multiply(a, b); 
     cout << "The answer is: " << answer3 << endl; 
     system("PAUSE"); 
     return 0; 
    } 
    else if (op == 'D' || 'd' || '/') 
    { 
     int answer4 = 0; 
     answer4 = divide(a, b); 
     cout << "The answer is: " << answer4 << endl; 
     system("PAUSE"); 
     return 0; 

    } 
    else if (op == 'R' || 'r' || '%') 
    { 
     int answer5 = 0; 
     answer5 = remainder(a, b); 
     cout << "The answer is: " << answer5 << endl; 
     system("PAUSE"); 
     return 0; 
    } 

ответ

2

Ваша логика неверна, и вы используете оператор присваивания для загрузки.

if (op ='A' || 'a' || '+') 

Это должно быть:

if (op == 'A' || op == 'a' || op == '+') 

Обычно такие вещи, как это мы используем switch:

switch(toupper(op)) 
{ 
    case 'A': 
    case '+': 
     // Do adding... 
     break; 

    case 'S': 
    case '-': 
     // Do subtraction... 
     break; 

    // etc... 

    default: 
     cout << "Unknown operation : " << op << endl; 
} 
0

В вашей, если заявление

(op ='A' || 'a' || '+') 

вы не тестируете, если op равен «A». Вы устанавливаете op равным 'A', а затем проверяете, являются ли «a» и «+» истинными, какими они являются. Чтобы исправить это, используйте оператор == и проверьте op для каждого случая, подобного этому:

if (op == 'A' || op == 'a' || op == '+')... 
else if(op == 'S' || op == 's' || op == '-')... 

// and so on 
Смежные вопросы