Мне нужна ваша помощь при проверке ошибок для простого калькулятора. Большая часть кодирования выполнена, но у меня есть трудности с двумя вещами. Во-первых - когда пользователь вводит номер 45, пространство 5 + 5 должно быть ошибкой, так как существует пробел между 45 и 5, то же самое происходит со вторым номером, если есть пробел между двумя номерами Ошибка. Во-вторых - мне нужно включить его в цикл «do while». Я попытался, но не смог. Любая помощь приветствуется.Ошибка проверки простого калькулятора в C [Решено]
#include <stdio.h>
#include <math.h>
int addition(int num1, int num2);
int subtract(int num1, int num2);
int multi(int num1, int num2);
int div(int num1, int num2);
int modul(int num1, int num2);
int main(void){
int ch, sum = 0, num1 = 0, num2 = 0,operand =0, opcount =0, numcount1 = 0,numcount2 = 0;
while (((ch = getchar()) != EOF) && ch != '\n') {
if ((ch >= '0') && (ch <= '9')) { // digits
if (operand == 0) {
numcount1++;
num1 = ((num1 * 10) + (ch - '0')); // no operand so use num1
}
else {
numcount2++;
num2 = ((num2 * 10) + (ch - '0')); // operand has been assigned
}
}
else { // non digits
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%'){
opcount++;
if (operand == 0) { // do not re-assign operand
operand = ch; // assign operand
}
}
}
} /* End of the while loop*/
/*printf("\n Result of num1 %d \n", num1);
printf("\n Result of oper %c \n", operand);
printf("\n Result of num2 %d \n", num2); */
if (operand == '+' && opcount == 1 && numcount1 > 0 && numcount2 > 0)
printf("\n Result of %d + %d = %d \n",num1,num2, addition(num1,num2));
else if (operand == '-' && opcount == 1 && numcount1 > 0 && numcount2 > 0)
printf("\n Result of %d - %d = %d \n", num1, num2, subtract(num1, num2));
else if (operand == '*' && opcount == 1 && numcount1 > 0 && numcount2 > 0)
printf("\n Result of %d * %d = %d \n", num1, num2, multi(num1, num2));
else if (operand == '/' && opcount == 1 && num2 != 0 && numcount1 > 0 && numcount2 > 0)
printf("\n Result of %d/%d = %d \n", num1, num2, div(num1, num2));
else if (operand == '%' && opcount == 1 && num2 != 0 && numcount1 > 0 && numcount2 > 0)
printf("\n Result of %d %% %d = %d \n", num1, num2, modul(num1, num2));
else printf("\n Expression Error \n");
} /* End of main*/
/********************************** FUNCTIONS ********************************************/
int addition(num1, num2){
int sum = 0;
sum = num1 + num2;
return sum;
}
int subtract(num1, num2){
int sub = 0;
sub = num1 - num2;
return sub;
}
int multi(num1, num2){
int mul = 0;
mul = num1 * num2;
return mul;
}
int div(num1, num2){
int d = 0;
d = num1/num2;
return d;
}
int modul(num1, num2){
int m = 0;
m = num1 % num2;
return m;
}
'INT сложение (num1, пит2)' должен быть 'INT сложение (INT num1, Int пит2)'. То же самое относится к другим функциям. – user1336087
Спасибо, исправлено – Max
В чем смысл «multi (num1, num2)», когда вы можете написать 'num1 * num2'? если бы у вас были указатели на функции, это имело бы смысл, но не так, как вы его используете. это просто * шум *. много этого. –