У меня небольшая проблема с моей программой.Мне нужно сложить арифметическое выражение, например: 10 + 2 + 1/2, используя только рекурсию.
Я написал что-то вроде этого:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int calculate(const char* expr, float *result);
int calculate_rec(const char* expr, float *result, int i, char sg, int number);
int main(void){
char expression[201]={0};
char *expr=expression;
float result;
float *res=&result;
printf("enter operation: ");
fgets(expr, 201, stdin);
fflush(stdin);
calculate(expr, res);
printf("%.2f", result);
return 0;
}
int calculate(const char* expr, float *result){
if(expr==NULL) return 0;
calculate_rec(expr, result, 0, 0, 0);
return 1;
}
int calculate_rec(const char* expr, float *result, int i, char sg, int number){
if(isdigit(*(expr+i))) number=number*10+*(expr+i)-'0';
else{
switch(sg){
case '+': *result += number;
break;
case '-': *result -= number;
break;
case '*': *result *= number;
break;
case '/': if(number==0) return 0;
*result /= number;
break;
}
number = 0;
sg = *(expr + i);
}
if (*(expr + i)=='\0') return 1;
return calculate_rec(expr, result, i + 1, sg, number);
}
Эта программа работает хорошо, но пропускаетпервое число в данной строке, из строки: 10 + 1 + 2/2, результат равен 1,5 и должен быть 6,5.