I don't understand why my output after 1 cycle of execution prints "Enter one of the operators" for 2 times and only then "Choose an operator(+, -, *, /, !): ". Also, program says to change datatype of sum even though it is not int. So sum might be 2 in case of 5/2. Should I just change data types of value1, value2 and sum to double?
#include <stdio.h>
int add(int value1, int value2);
int sub(int value1, int value2);
int multiply(int value1, int value2);
int divide(int value1, int value2);
int factorial(int value1);
int main(int sum){
int value1, value2;
char o;
do{
printf("Choose an operator(+, -, *, /, !): ");
scanf("%c", &o);
if (o == '+' || o == '-' || o == '*' || o == '/'){
printf("Enter the first number: ");
scanf("%d", &value1);
printf("Enter the second number: ");
scanf("%d", &value2);
}else if (o == '!'){
printf("Enter the first number: ");
scanf("%d", &value1);
}
if (o == '+'){
sum = add(value1, value2);
printf("%d + %d = %d\n", value1, value2, sum);
}
else if (o == '-'){
sum = sub(value1, value2);
printf("%d - %d = %d\n", value1, value2, sum);
}
else if (o == '*'){
sum = multiply(value1, value2);
printf("%d * %d = %d\n", value1, value2, sum);
}
else if (o == '/'){
sum = divide(value1, value2);
printf("%d / %d = %d\n", value1, value2, sum);
}
else if (o == '!'){
sum = factorial(value1);
printf("%d!= %d\n", value1, sum);
}
else{
printf("Enter one of the operators!");
}
}while(o != 'q');
}
int add(int value1, int value2){
return (value1 + value2);
}
int sub(int value1, int value2){
return (value1 - value2);
}
int multiply(int value1, int value2){
return (value1 * value2);
}
int divide(int value1, int value2){
return (value1 / value2);
}
int factorial(int value1){
if (value1 == 0 || value1 == 1){
return 1;
}else{
return value1 * factorial(value1 - 1);
}
}