Итак, обзор кода Я сделал калькулятор, который выполняет обычные операции, такие как сложение и т. Д. (Here was the question). Во всяком случае, я следил за советом и обновлял программу. Однако меню исходной программы отлично работает, оно выводит меню один раз, когда пользователь запускает программу, и когда они заканчивают выполнение вычисления, программа затем снова будет возвращаться к началу и из меню. Как и любой другой бесконечный цикл. Но я решил снова сделать программу с нуля, но на этот раз программа выводит меню дважды после того, как пользователь выполнит первый расчет. Я пробовал делать for(;;)
вместо цикла do-while, но у меня такая же проблема. Я понятия не имею, что пошло не так, было бы очень признательно, если бы кто-то мог это исправить для меня, и поэтому я больше не сталкивался с этой проблемой.Loop выводит меню моей программы C дважды
Вот код:
#include <stdio.h>
#include <stdlib.h>
void getNumbers(float *, float *);
float addition(float, float);
float subtraction(float, float);
float multiplication(float, float);
float division(float, float);
int main(void)
{
do
{
float num1, num2;
char choice;
puts("\nEnter number or letter from below\n\n"
"\t1. Addition\n"
"\t2. Subtraction\n"
"\t3. Multiplication\n"
"\t4. Division\n"
"\tQ. Quit program");
printf("\nEnter choice: ");
scanf("%c", &choice);
if(choice == 'q' || choice == 'Q')
{
puts("\nQuitting program...");
exit(0);
}
else if(choice < '1' || choice > '4')
{
puts("\nInvalid input");
}
else
{
getNumbers(&num1, &num2);
if(choice == '1')
{
printf("\n%.2f + %.2f = %.2f\n", num1, num2, addition(num1, num2));
}
else if(choice == '2')
{
printf("\n%.2f - %.2f = %.2f\n", num1, num2, subtraction(num1, num2));
}
else if(choice == '3')
{
printf("\n%.2f * %.2f = %.2f\n", num1, num2, multiplication(num1, num2));
}
else if(choice == '4')
{
if(num2 == 0)
{
puts("\nDivision by zero");
}
else if(num2 != 0)
{
printf("\n%.2f/%.2f = %.2f\n", num1, num2, division(num1, num2));
}
}
else
{
puts("\nInvalid input");
}
}
}while(1);
return 0;
}
void getNumbers(float *num1_ptr, float *num2_ptr)
{
printf("\nEnter first number: ");
scanf("%f", num1_ptr);
printf("\nEnter second number: ");
scanf("%f", num2_ptr);
}
float addition(float num1, float num2)
{
return num1 + num2;
}
float subtraction(float num1, float num2)
{
return num1 - num2;
}
float multiplication(float num1, float num2)
{
return num1 * num2;
}
float division(float num1, float num2)
{
return num1/num2;
}
Вы можете попробовать добавить '' printf''s вокруг кода, чтобы увидеть, что он делает. –
try 'scanf ("% c ", & choice);' change to 'scanf ("% c ", & choice);' для пропуска новой строки. – BLUEPIXY
Работает, странно, как это было. В другой программе я сделал 'scanf («% c », & choice);' но не выводил меню дважды. –