How can I exit the program by entering the q character once, not twice?
Why do I need to enter "q" for once more?
I think the expression || scanf("%c", &operation)
did not work.
/*
* Name: Calculator.
* Description: Calculator for simple math operations.
*
* Compiler: Apple LLVM version 10.0.0 (clang-1000.11.45.5).
* Coding style: Google.
*/
#include <locale.h>
#include <math.h>
#include <stdio.h>
#define TRUE 1
#define EXIT 'q'
double add(double x, double y);
double subtract(double x, double y);
double multiply(double x, double y);
double divide(double x, double y);
double degree(double x, int y);
double sqrt(double x);
double mod(double x, double y);
double div(double x, double y);
int main(void) {
char *locale = setlocale(LC_ALL, "");
printf("Examples:\n\n");
printf("1 + 2\n");
printf("1 - 2\n");
printf("1 * 2\n");
printf("1 / 2\n");
printf("1 ^ 2\n");
printf("(sqrt): s 2\n");
printf("(mod): 1 m 2\n");
printf("(div): 1 d 2\n\n");
printf("Input for exit: \"q\"\n\n");
while (TRUE) {
double x, y;
char operation;
scanf("%lf %c %lf", &x, &operation, &y) ||
scanf("%c %lf", &operation, &x) || scanf("%c", &operation);
switch (operation) {
case ' ':
break;
case '\n':
break;
case '+':
printf("Result = %.2lf\n", add(x, y));
break;
case '-':
printf("Result = %.2lf\n", subtract(x, y));
break;
case '*':
printf("Result = %.2lf\n", multiply(x, y));
break;
case '/':
if (y != 0) {
printf("Result = %.2lf\n", divide(x, y));
} else {
printf("\nError!.\n");
}
break;
case '^':
printf("Result = %.2lf\n", degree(x, y));
break;
case 's':
printf("Result = %.2lf\n", sqrt(x));
break;
case 'm':
printf("Result = %.2lf\n", divide(x, y));
break;
case 'd':
printf("Result = %.2lf\n", divide(x, y));
break;
case EXIT:
printf("Input symbol \"%c\"\nExit...\n", EXIT);
return 0;
}
}
return 0;
}
double add(double x, double y) { return (x + y); }
double subtract(double x, double y) { return (x - y); }
double multiply(double x, double y) { return (x * y); }
double divide(double x, double y) { return (x / y); }
double degree(double x, int y) {
int response = 1;
while (y) {
if (y & 1) response *= x;
x *= x;
y >>= 1;
}
return response;
}