2013-03-07 7 views
-2

Я просто перехожу из c в C++ и пытаюсь построить калькулятор. Int 'result' не инициализируется с помощью операций maths. Логика заключается в том, что в зависимости от операции 'будет назначено другое значение, присвоенное «результату». Кажется, это не работает.Почему моя переменная не инициализируется?

#include<iostream> 
#include<cstring> 
#include<cmath> 
using namespace std; 

int main() 
{ 
    int n1, n2; 
    char s,r; 
    int result = 0; 
    cout<< "Enter a calculation? (y/n)"<<endl; 
    cin>>r; 
    while(r=='y') 
    { 
     cout <<"Enter the first number"<<endl; 
     cin>>n1; 
     cout<<"Enter the operator"<<endl; 
     cin>>s; 
     cout<<"Enter the second number"<<endl; 
     cin>>n2; 

     if ('s' == '*') 
     { 
      result = n1*n2; 
     } 
     if ('s' =='+') 
     { 
      result = n1+n2; 
     } 

     if ('s' =='-') 
     { 
      result = n1-n2; 
     } 

     if ('s' =='/') 
     { 
      result = n1/n2; 
     } 
     cout << result<<endl; 
     cout<< "Enter a calculation? (y/n)"<<endl; 
     cin>>r; 
    } 
    return 0; 
} 
+0

Как вы знаете *** *** результат не инициализирована? Каковы ваши доказательства? Каков был ваш вклад и какой результат вы ожидали в сравнении с тем, что вы на самом деле видели? – abelenky

+0

* «Это не работает». * Почему? В чем проблема? – m0skit0

+1

Все это, больно. – 2013-03-07 17:42:36

ответ

13

Вы должны сравнить с s не с 's'. Так что ваш код должен выглядеть

if (s == '*') 
{ 
    result = n1*n2; 
} 

Кодекса

if ('s' == '*') 

сравнивает характер s с характером *, который всегда ложно.

3

@OlafDietsche имеет это право.

Я хотел бы также рекомендовать переход на switch-case заявление:

switch(s) 
{ 
    case '*': result = n1*n2; break; 
    case '+': result = n1+n2; break; 
    case '-': result = n1-n2; break; 
    case '/': result = n1/n2; break; 
} 
+0

+1 Очень хороший совет. –

Смежные вопросы