Задать вопрос
mksmvnv
@mksmvnv
Backend Developer

Почему программа прерывает свою работу на 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.
Нажмите любую клавишу, чтобы закрыть это окно:
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Академия Эдюсон
    Разработчик игр на Unreal Engine + ИИ
    9 месяцев
    Далее
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Возможно scanf при попытки считывать 1 character читает предыдущий enter.

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

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

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

Похожие вопросы