Мой профессор хотел, чтобы мы создали калькулятор, который принимает два положительных операнда и один оператор.Любые пробелы, которые вводит пользователь, должны игнорироваться.
проблема с ребенком, который у меня возникает с этим кодом:
else if (symbolRead == 1 && isNumber(ch)) {
num2 += (num2 * 10) + (ch - '0');
}
, если я введу 55 + 66, я вместо этого получу 55 + 72. Это можетиметь какое-то отношение к ascii.6 - это 54 в ascii, но я вообще не вижу, как 6 + = (6 * 10) + (54 - '0') дает 72.
Вот некоторая проверка ошибок, которую я сделал
Пожалуйста, введите простое арифметическое выражение: 55 + 66
до добавления: num1 равно 0
после добавления: num1 равно 5
до добавления: num1 равно 5
после добавления: num1 равно 55
до добавления: num2 равно 0
после добавления: num2 равно 6
до добавления: num2 равно 6
после добавления: num2 равно 72
Я хочу отметить, что если я, скажем, 55 + 7, я получу правильный ответ, так что это связано с тем, как num2 добавляет следующую цифру,Я знаю, что у кода есть некоторые другие проблемы, но это относительно сделано, когда я выясняю, почему это происходит.Ваша помощь очень ценится!
#include <stdio.h>
int addition(num1, num2);
int subtraction(num1, num2);
float division(num1, num2);
int multiply(num1, num2);
int modulus(num1, num2);
//functions made to act like isdigit, ispunct, and isspace
int isNumber(int chara);
int isSymbol(char chara);
int isASpace(int chara);
int main() {
int ch, num1 = 0, num2 = 0, goAgain = 1, result = 0;
char symbol = 0;
int symbolRead = 0;
int error = 0;
printf("Welcome to simple calculator simulator.\nPlease enter a simple arithmetic expression: ");
do {
while ((ch = getchar()) != EOF && ch != '\n') {
if (isASpace(ch)) {
continue;
}
else if (!isNumber(ch) && !isSymbol(ch)) {
printf("ERRORr: %d is not a valid input", ch);
error = 1;
} //error checking
if (error == 0) {
if (symbolRead == 0 && isNumber(ch)) {
num1 = (num1 * 10) + (ch - '0');
}
else if (symbolRead == 1 && isNumber(ch)) {
num2 += (num2 * 10) + (ch - '0');
}
else if (isSymbol(ch)) {
symbol = ch;
symbolRead++;
}
}
}
if (symbolRead > 1) {
printf("ERROR: More than one symbol detected. Please try again using only positive integers.");
error = 1;
}
if (error == 0) {
switch (symbol) {
case '+':
printf("You have selected addition. Calculating your result...\n");
result = addition(num1, num2);
printf("%d + %d = %d", num1, num2, result);
break;
case '-':
printf("You have selected subtraction. Calculating your result...\n");
result = subtraction(num1, num2);
printf("%d - %d = %d", num1, num2, result);
break;
case '/':
printf("You have selected integer division. Calculating your result...\n");
result = division(num1, num2);
printf("%d / %d = %d", num1, num2, result);
break;
case '*':
printf("You have selected multiplication. Calculating your result...\n");
result = multiply(num1, num2);
printf("%d * %d = %d", num1, num2, result);
break;
case '%':
printf("You have selected modulus divison. Calculating your result...\n");
result = modulus(num1, num2);
printf("%d %% %d = %d", num1, num2, result);
break;
}
}
printf("\nWould you like to try another expression? 1 for yes and 0 for no: ");
scanf("%d", &goAgain);
} while (goAgain == 1);
system("pause");
return 0;
}
int isASpace(int chara) {
if (chara == ' ' || chara == '\t')
return 1;
return 0;
}
int isNumber(int chara) {
if (chara >= 48 && chara <=57)
return 1;
return 0;
}
int isSymbol(char chara) {
if (chara == '*' || chara == '%' || chara == '+' || chara == '/' || chara == '-')
return 1;
return 0;
}
int addition(num1, num2) {
return (num1 + num2);
}
int subtraction(num1, num2) {
return (num1 - num2);
}
float division(num1, num2) {
return (num1 / num2);
}
int multiply(num1, num2) {
return (num1 * num2);
}
int modulus(num1, num2) {
return (num1 % num2);
}