Другие языки программирования и технологии

c++ ошибка программы

Я тут решил с дельфи перейти на плюсы, но это не важно, сейчас я решил попрактиковаться и сделать простейший калькулятор.
Но хоть и всё работает, в конце он всегда пишет, что ответ 0!посмотрите пожалуйста кодик)

////////////////////////////
#include
#include
using namespace std;
int main()
{
setlocale(0, "");
long long int a = 0, b = 0, rez= 0;
char c = 0;
cout << "Сначала введите первое число: ";
cin >> a;
cout << "------------------------------------------------------------------------------" << endl;
cout << "" << endl;
cout << "Теперь введите арифметический знак (1-+,2--,3-*,4-/): ";
cin >> c;
cout << "------------------------------------------------------------------------------" << endl;
cout << "" << endl;
cout << "Ну а теперь введите второе число: ";
cin >> b;
cout << "------------------------------------------------------------------------------" << endl;
cout << "" << endl;
if (c == 1)
rez = a + b;
else if (c == 2)
rez = a - b;
else if (c == 3)
rez = a * b;
else if (c == 4 )
rez = a / b;
cout << rez << endl;
system("pause");
return 0;
}
//////////////////////////////////////////////////
char сравнивается с целым. Некорректно, ни одна из операций не выбирается, посему ответ - ноль
Юрий Саксонов
Юрий Саксонов
97 745
Лучший ответ
Жанат Нурбатыров вот сравнивать как раз можно. только вместо указанного значения ноль будет его код, по-моему)
Сакен Бегжан О, а тут начало работать))) СПАСИБО!) надо будет запомнить, и потом учитывать)))
Если считать эту программу упражнением для начинающих, то можно написать так:

#include "iostream"
using namespace std;
int main(){
double a,b,c,rez;
cout<<"-------------\nNumber: "; cin >> a;
cout<<"-------------\nOperation (1-+,2--,3-*,4-/): "; cin >> c;
cout<<"-------------\nNumber: "; cin >> b;
if(c==1)rez=a+b;
if(c==2)rez=a-b;
if(c==3)rez=a*b;
if(c==4)rez=a/b;
cout<<"-------------\nResult="<<rez<<endl; cin.get(); cin.get();}

Красивее был бы прямой ввод знака операции и использование switch:

#include "iostream"
using namespace std;
int main(){
double a,b,r=0; char c;
cout<<"-------------\nNumber: "; cin>>a;
cout<<"-------------\nOperation (+ - * /): "; cin>>c;
cout<<"-------------\nNumber: "; cin>>b;
switch(c){case'+':r=a+b;break; case'-':r=a-b;break; case'*':r=a*b;break; case'/':r=a/b;}
cout<<"-------------\nResult="<<r<<endl; cin.get(); cin.get();}
Игорь Илензеер
Игорь Илензеер
92 258
При использование интов даже long long происходит жесткое приведение типов - потому результат может быть равен нулю либо в операциях умножения и деления сначала приводите все к флоат а потом обратно либо юзайте флоат
Сакен Бегжан спасибо, попробую
Сакен Бегжан Не работает (((поменял с long long int на float, не выходит ((
есть подозрение, что ни одна из веток

if (c == XXX)

не выполняется

вводи в качестве операций плюсы

и сравнивай так

if (c == '+')

=================
UPD: Рекомендую подружиться с отладчиком. Прежде чем задавать такие вопросы, обращайся к нему. Если хорошо попросишь, он тебе покажет как покомандно выполняется твоя программа...
Насим Алибоев
Насим Алибоев
21 154
Сакен Бегжан На счёт отладчика, как сделать так, что-бы он показывал в какой я сейчас части кода? MS visual studio
проверь чему равна переменная с после ввода любой цифры. Возможно, что ей присваивается код цифры в таблице кодировки. Если так, то решение проблемы очень простое) просто поменять тип char на int
а почему инклуды пустые?)
Юрий Саксонов здешний парсер режет. Особенность сервиса
Сакен Бегжан Скопировал с ошибкой... Там написано и )))
Аскар Тюленов я так подозреваю, это потому что новая версия сайта думает что все, что заключено между > и < , есть тег.