#c
Вопрос:
Я просто делаю простой калькулятор и хотел бы знать, как я мог бы сделать так, чтобы мой калькулятор возвращался к началу, когда вводится недопустимый оператор/float; чтобы попросить пользователя ввести все снова. В основном перезапускаю его.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
double num1;
double num2;
char op;
printf("Input a number: ");
scanf("%lf", amp;num1);
printf("Enter operator ( ,-,*,/,^): ");
scanf(" %c", amp;op);
printf("Enter the second number: ");
scanf(" %lf", amp;num2);
if (op == ' ')
{
printf("%f", num1 num2);
}
else if (op == '-')
{
printf("%f", num1 - num2);
}
else if (op == '/')
{
printf("%f", num1 / num2);
}
else if (op == '*')
{
printf("%f", num1 * num2);
}
else if (op == '^')
{
printf("%f", pow(num1,num2));
}
else
{
printf("Invalid operator entered");
}
return 0;
}
Комментарии:
1. Оберните основную часть в бесконечный цикл (
while (1) { ... }
или что-то подобное). В конце циклаbreak
это. Когда в цикле возникает ошибка (которая, по крайней мере, не помешает вам повторить попытку),continue
это.2. Переименуйте
main()
какcalc()
и используйте этоmain()
вместо:int main() { for (;;) calc(); }
Ответ №1:
Вставьте всю логику в бесконечный цикл, как показано ниже.
while(1) {
printf("Input a number: ");
scanf("%lf", amp;num1);
printf("Enter operator ( ,-,*,/,^): ");
scanf(" %c", amp;op);
printf("Enter the second number: ");
scanf(" %lf", amp;num2);
if (op == ' ')
{
printf("%f", num1 num2);
}
else if (op == '-')
{
printf("%f", num1 - num2);
}
else if (op == '/')
{
printf("%f", num1 / num2);
}
else if (op == '*')
{
printf("%f", num1 * num2);
}
else if (op == '^')
{
printf("%f", pow(num1,num2));
}
else
{
printf("Invalid operator entered");
}
}
Комментарии:
1. очень маловероятно, что это сработает во время второй операции
Ответ №2:
Я бы сделал это по-другому, чтобы n
избежать проблем со сканированием
#define MAXNUMSTR 100
int calc(void)
{
char line[MAXNUMSTR];
double num1;
double num2;
double res;
do
{
printf("nInput first number: ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
}while(sscanf(line, "%lf", amp;num1) != 1);
do
{
printf("nInput second number: ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
}while(sscanf(line, "%lf", amp;num2) != 1);
printf("nEnter operator ( ,-,*,/,^, x): ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
switch(line[0])
{
case ' ':
res = num1 num2;
break;
case '-':
res = num1 - num2;
break;
case '*':
res = num1 * num2;
break;
case '/':
if(num2 == 0.0)
{
printf("nDivision by zeron");
return 1;
}
res = num1 / num2;
break;
case '^':
res = pow(num1, num2);
break;
case 'x':
return 0;
default:
printf("nInvalid operationn");
return 1;
}
printf("n%f %c %f = %fn", num1, num2, res);
return 1;
}
int main(void)
{
while(calc());
return 0;
}