c = add(a,b);
в вашем выражении switch не сохраняет функцию, она вызывает функцию, передавая ей a
и b
в качестве аргументов. Это то же самое для всех остальных ваших случаев. Но на тот момент в программе вы еще не установили a
и b
. Они неинициализированы, поэтому они могут быть чем угодно. Включая 0
, что может вызвать проблемы при разделении. Редактировать: На самом деле, я только что понял, что они глобальные. Поэтому они должны быть инициализированы для вас нулем, что гарантировало бы, что опция деления не удастся. Если бы a
и b
были локальными с точностью до main
, они были бы неинициализированы, и вы не могли бы сделать никаких предположений относительно того, что они изначально содержат.
Можно сохранить адрес для указателя, но это довольно сложная тема, и я бы порекомендовал вам подождать, пока вы не разберетесь с основами, прежде чем углубляться в него. Пока что вам лучше всего получать все ваши данные от пользователя, а затем обрабатывать все сразу. В псевдокоде ваш цикл будет выглядеть примерно так:
Get Operator
If Operator < 0 or Operator > 4 Then "Error"
Get A
Get B
Switch Operator
1: Result = Add(A, B)
2: Result = Subtract(A, B)
3: Result = Multiply(A, B)
4: Result = Divide(A, B)
Output result
Обратите внимание, что существует много"ошибок", когда дело доходит до ввода пользователя. Например, когда вы просите пользователя ввести значение для a
, что если он введет «Пять»? По крайней мере, вы захотите проверить статус cin
после любого ввода; это скажет вам, получил ли он какие-либо действительные данные от пользователя или нет. cin.good()
должен сообщить вам, была ли предыдущая операция успешной, и если нет, вы можете выйти, или попытаться снова, или как вам угодно.