C/C++

Завершается программа в Си

 #include  
#include
#include

int main() {
setlocale(LC_ALL, "Russian");
int a,b;
char op;
printf("Введите число №1: ");
scanf("%d",&a);
printf("Введите число №2: ");
scanf("%d",&b);
printf("Введите операцию (+/-/*/:): ");
scanf("%c",&op);
if (op == "+") printf("%d",a+b);
if (op == "-") printf("%d",a-b);
if (op == "*") printf("%d",a*b);
if (op == ":") printf("%d",a/b);
return 0;
}

Когда программа доходит до процесса выбора операции, программа завершается и просит нажать любую клавишу. В чём может быть причина?
Ошибка № 1: Не "+", а '+'.

"+" - СТРОКА, значением которой является АДРЕС этой строки в RAM. Сравнение адреса с кодом символа в переменной op всегда вернёт false.

'+' - СИМВОЛ, значением которого является КОД этого символа.

Ошибка № 2: смешивание числового и символьного ввода. Вводи не числа / символы, а строки через gets и преобразуй строки в числа через atoi.

 int a, b;
char tmp[100];
printf("Введите число № 1: ");
a = atoi(gets(tmp));
printf("Введите число № 2: ");
b = atoi(gets(tmp));
printf("Введите операцию (+/-/*/:): ");
gets(tmp);
if (tmp[0] == '+') printf("%d", a + b);
if (tmp[0] == '-') printf("%d", a - b);
if (tmp[0] == '*') printf("%d", a * b);
if (tmp[0] == ':') printf("%d", a / b);
Из Ниоткуда В Никуда
Из Ниоткуда В Никуда
87 421
Лучший ответ
Сергей Триунтов
 #include  
#include
#include
#include

int main() {
setlocale(LC_ALL, "Russian");
int a,b;
char op;
printf("Введите число №1: ");
scanf("%d",&a);
printf("Введите число №2: ");
scanf("%d",&b);
printf("Введите операцию (+/-/*/:): ");
op = getch();
if (op == '+') printf("%d",a+b);
else if (op == '-') printf("%d",a-b);
else if (op == '*') printf("%d",a*b);
else if (op == ':') printf("%d",a/b);
return 0;
}
ну правда пацан снизу уже подсказал как поопроще решить проблему, но я ещё нашёл решение). я просто впихнул conio.h и добавил getch(). вуаля, один раз нажал и энтер не нужен :3
Сергей Триунтов а так, спасибо
Вроде как scanf("%c",&op) тоже что и getchar(op). Чар жрет все что ему дают, в том числе пробелы и символ ввода строки (который остается когда вы нажимаете энтер).
 #include   
#include
#include

int main() {
setlocale(LC_ALL, "Russian");
int a, b;
char op;
printf("Введите число №1: ");
scanf("%d", &a);
printf("Введите число №2: ");
scanf("%d", &b);
printf("Введите операцию (+/-/*/:): ");
scanf("\n%c", &op); //*см примычание*
if (op == '+') printf("%d", a + b);
if (op == '-') printf("%d", a - b);
if (op == '*') printf("%d", a * b);
if (op == ':') printf("%d", a / b);
return 0;
}
"\n%c" - такая запись вначале проигнорит один символ ввода оставшийся после второго числа и считает следующий символ.
А по поводу сравнения чара и строки вам уже сказали)