mksmvnv
@mksmvnv

Почему программа прерывает свою работу на C?

Написал мега простой калькулятор на старте обучения. Создатель курса не отвечает на вопрос, поэтому пишу тут. Консольная программа спокойно принимает x, y и math. То есть числа для подсчета результата и символ операции присваиваются адекватно. Но, как только программа должна через свич найти совпадения и вывести расчет, сразу же перескакивает на строку с дефолтом и принтует сообщение об ошибки. Ниже будет код, а ниже кода, то что выводится в консоли. Что заставляет программу прерваться и перескочить не дефолт? Заранее спасибо!

#include <stdio.h>

int main() {

	int x, y, res;
	char math;

	printf("Please, enter first namber: ");
	scanf("%d", &x);
	printf("Please, enter second namber: ");
	scanf("%d", &y);
	printf("Please, enter math symbol: ");
	scanf("%c\n", &math);
	printf("Please, wait... We are calculating finish result.\n");

	switch(math) {
		case '+':
			res = x + y;
			printf("Result: %d + %d = %d\n", x, y, res); break;
		case '-':
			res = x - y;
			printf("Result: %d - %d = %d\n", x, y, res); break;
		case '*':
			res = x * y;
			printf("Result: %d * %d = %d\n", x, y, res); break;
		case '/':
			res = x / y;
			printf("Result: %d / %d = %d\n", x, y, res); break;
		default:
			printf("Error. Please, try again."); break;
	}

	return 0;
}


Вывод программы:

Please, enter first namber: 56
Please, enter second namber: 45
Please, enter math symbol: +
Please, wait... We are calculating finish result.
Error. Please, try again.
D:\С\tasks\21\x64\Debug\21.exe (процесс 8132) завершил работу с кодом 0.
Нажмите любую клавишу, чтобы закрыть это окно:
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Возможно scanf при попытки считывать 1 character читает предыдущий enter.

Попробуй рецепт который пишут тут https://stackoverflow.com/questions/13542055/how-t...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Ну выведите что у вас в math, и сколько в нем символов. Или дебагом посмотрите. Это раз.

Второе - я не уверен, но по моему свитч не работает со строками, ибо сравнивает указатели.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы