Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define bufSize 2048
int main()
{
char userInput[bufSize];
int opers[5];
char operA;
int exprA;
int numA, idx;
double result;
char doneFlag = 'f';
do {
printf("Enter one of the following options: \n\
Q - Quit the program\n\
Eval(<exp>) - Evaluate a simple expression\n\
! - Evaluate an integer factorial\n\
P(n,k) - Count k-permutations of a string of n characters\n\
\n\ Enter your option: ");
fgets(userInput,bufSize,stdin);
if(strstr(userInput,"Q") != NULL) {
doneFlag ='t';
} else if(strstr(userInput,"q") != NULL) {
doneFlag ='t';
} else if(strstr(userInput,"Eval") != NULL){
sscanf(userInput,"%*c%*c%*c%*c%*c%d %c %d%*c", &opers[0], &operA, &opers[1]);
switch(operA) {
case '+':
exprA = opers[0] + opers[1];
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
case '-':
exprA = opers[0] - opers[1];
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
case '/':
exprA = opers[0] / opers[1];
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
case '*':
exprA = opers[0] * opers[1];
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
case '%':
exprA = opers[0] % opers[1];
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
case '^':
exprA = pow(opers[0], opers[1]);
printf("%d %c %d = %d\n", opers[0], operA, opers[1], exprA);
break;
default:
exprA = 0;
printf("?'%c' is not a valid operator", operA);
}
} else if(strstr(userInput,"!") != NULL){ // Calculate the Factorial of !
sscanf(userInput,"%*c%d", &opers[2]);
result = 1.0;
for(idx = 1; idx <= numA; idx++) {
result *= (double)idx;
}
printf("%d! = %.0lf\n", opers[2], result);
} else if(strstr(userInput,"P") != NULL){ // Calculate P(n,k)
sscanf(userInput,"%*c%*c%d%*c%d%*c", &opers[3], &opers[4]);
opers[5] = opers[3] / (opers[3] - opers[4]);
printf("A string of %d characters has %d permutations of length %d\n", opers[3], opers[5], opers[4]);
}
} while(doneFlag == 'f');
return 0;
}