Задача 1:
Вы звоните calc()
рекурсивно без базового случая. Это означает, что при вызове этой функции вы неизбежно вызовете переполнение стека.
Решение:
Удалить рекурсивный вызов на calc()
in calc()
.
Задача 2:
scanf_s
требует, чтобы строковый аргумент, удовлетворяющий спецификатору формата %s
, шел непосредственно перед целочисленной переменной, задающей длину буфера. См. Документацию по MSDN .
Решение: передайте также длину строки:
scanf_s("%s", input, 100);
Примечание: проверка возвращаемого значения scanf
-семейных функций обычно является хорошей идеей.