Только начинаю учить С. Написал прогу для сложения, вычитания, умножения и деления в консоли. Подскажите что не так, а то выдает вообще не то что должна.
#include <iostream>
#include <stdlib.h>
using namespace std;
main(){
int a,b,res,operation;
system("chcp1251");
system("cls");
cout << "Program for addition, subtraction, division and multiplication of two numbers" << endl;
cout << "Select operation: 1 - addition, 2 - subtraction, 3 - division, 4 - multiplication";
cin >> operation;
if (1>operation>4){
cout << "You have chosen an invalid operation";
system("pause");
}
cout << "Enter 2 numbers";
cin >> a >> b;
if (operation=1){
res = a+b;
cout <<a<<'+'<<b<<'='<<res;
}
if (operation=2){
res = a-b;
cout <<a<<'-'<<b<<'='<<res;
}
if (operation=3){
res = a*b;
cout <<a<<'*'<<b<<'='<<res;
}
if (operation=4){
res = a/b;
cout <<a<<'/'<<b<<'='<<res;
}
system ("pause");
}

if (1>operation>4) неправильно составлено условие.
И при выполнении условия при не попадании в диапазон от 1 до 4 надо сообщать и прекращать дальнейшую обработку. У Вас после нажатия клавиши программа продолжит работу. Ничего страшного в данном случае не произойдет - просто будут лишние проверки и вторая пауза. Тут Вам решать чем выходить return или if - else. Я бы сделал return.
operation=2 - сравнение в C/C++ происходит через == (двойное равно) . а так Вы присваеваете.
куча if дальше и предыдущая проверка заменяется на switch/case
Вывод результата делать после всех вычислений, а не на каждом. Подумайте над выводом операции в этом случае (заведите char с операцией) .
Дерзайте =)
В идеале лучше вообще делать иначе, но для начала сойдет. Сразу всё не охватите.
if (1>operation>4)
В вашем случает сравнит 1>operation, получится булево (true либо false), после чего это булево будет сравниваться с 4, но поскольку 4 - число, то булево будет преобразовано в число: true -> 1, false -> 0, и это число будет сравниваться с 4.
Компилятор ошибку может и не выдать, это семантическая ошибка.
Следует написать так: if (1 > operation && operation > 4)
operation=1
Также компилятор ошибку может не выдать (но большинство выдают предупреждение) . Одиночный знак = означает присваивание. В итоге у вас переменной operation будет присвоено значение 1, а затем (поскольку все это находится в if-е) эта единица преобразуется в булево: 1 превратится в true. Т. е. данный оператор всегда будет выдавать истину.
Следует написать так: if (operation == 1)
А вообще, я бы рекомендовал воспользоваться switch, и тут же проверить на правильность выбора операции:
switch (operation)
{
case 1:
// Выполняем сложение
break;
case 2:
// Выполняем вычитание
break;
// аналогично 3, 4
default:
// Пишем, что операция выбрана неверно
};
Кроме того, что одинарное "равно" - это не сравнения, а присваивание, переменные, наверное, нужно сделать не int, а float, или double, иначе 6 / 12 так и будет равно 0 (результат - целая часть от деления) . Разделитель - например, \n (перенос строки).
Все отлично.
Только после res в каждом месте неплохо бы пробел вывести, или строку перенести, или хотя бы запятую вывести в консоль.