У меня есть проблема, когда мне нужно написать программу, управляемую меню, с использованием указателей функций в C. Пользователь выбирает вариант 1-3, и выполняется сложение, если ответ = 1, вычитание, если ответ = 2, умножение, если ответ = 3.
Первый прогон идеален, но как только я зацикливаюсь и пытаюсь выполнить второй расчет, он ищет выбор И первое число, прежде чем отобразит, какой выбор вы сделали.
Математика в каждой функции работает, передача переменных работает, только операторы printf и scanf выходят из строя после первого запуска.
(Есть функции вычитания и умножения, они совершенно одинаковы, за исключением того, что вместо оператора «+» есть оператор «-» и «*» соответственно.)
Я искал проблему, подобную этой, и пробовал команды fflush и setvbuf, они не работали.
void addition(int num1, int num2);
void subtraction(int num1, int num2);
void multiplication(int num1, int num2);
int main(void) {
void(*m[3])(int, int) = { addition, subtraction, multiplication };
size_t choice;
int num1, num2;
printf_s("Would like to add, subtract, or multiply?\nType 1 for
addition, 2 for subtraction, 3 for multiplication.\n");
scanf_s("%d", &choice);
printf_s("what two numbers would you like to work with?\n");
scanf_s("%d", &num1);
scanf_s("%d", &num2);
if (choice >= 1 && choice <= 3) {
(*m[choice - 1])(num1, num2);
while (choice >= 1 && choice <= 3) {
printf_s("Would like to add, subtract, or multiply?\nType 1
for addition, 2 for subtraction, 3 for multiplication.\n");
choice = 0;
scanf_s("%d\n", &choice);
printf_s("what two numbers would you like to work with?\n");
scanf_s("%d", &num1);
scanf_s("%d", &num2);
(*m[choice - 1])(num1, num2);
}
printf("execution complete");
}
return 0;
}
void addition(int num1, int num2) {
int i = 0;
i = num1 + num2;
printf("%d + %d = %d\n", num1, num2, i);
}
Если я введу следующее: 1 2 3, 2 3 1, я ожидаю, что вывод будет
"1"
"What two numbers would you like to work with?"
"2"
"3"
"2+3=5"
"would you like to add, subtract, or multiply?"
"Type 1 (...) for multiplication"
"2"
"what two numbers (...)"
"3"
"1"
"3-1 =2"
Однако я получаю это:
"1"
"What two numbers would you like to work with?"
"2"
"3"
"2+3=5"
"would you like to add, subtract, or multiply?"
"Type 1 (...) for multiplication"
"2"
"3"
"what two numbers (...)"
"1"
"3-1 =2"
Как видите, математика верна, но во второй раз потребовалось 2 числа, прежде чем он запросит 2 числа. Я не понимаю, как это возможно, поскольку перед выполнением следующего оператора printf сканируется только одна переменная. Несмотря на то, что умноженное мной «3» было сохранено в num1, оно сканировалось до printf, хотя оператор находится после printf, поэтому это невозможно. Я весьма озадачен!