我用语言 c 为计算器写了一个代码,在我写 1+1+1+1 浮点数时,我 return 不是结果,但是对于 1+1=2 我找到了我想修复的结果

i write a code for calculator in langage c ,in i write 1+1+1+1 in float i return not result but for 1+1=2 i find result i want to fix

我用 c 语言编写计算器代码,在浮点数中写 1+1+1+1 return 不是结果,但是对于 1+1=2 我找到了我想要修复的结果。

我对 som 使用计算函数,对结果使用 parsemath

申请代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

float calculate(float x, float y, char op)
{
    if (op == '+')
    {
        return x + y;
    }
    return -1;
}

char *parseMath(const char *s, char *result)
{
    float x;
    float y;
    char op;
    sscanf(s, "%f%c%f", &x, &op, &y);
    int offset = snprintf(NULL, 0, "%f%c%f", x, op, y);
    const char *rest = s + offset;
    float temp = calculate(x, y, op);
    printf("%zu\n", strlen(result));
    float done = rest[0] == '[=11=]';
    sprintf(result, "%f%s", temp, rest); //%.2f
    if (done)
    {
        return result;
    }
    else
    {
        return parseMath(result, result);
    }
}

int main(void)
{
    const char *exp = "1+1+1+1";
    char *result = malloc(strlen(exp) + 1);
    *result = 0;

    char *output = parseMath(exp, result);
    printf("output: %s\n", output);
}

问题是:

printf ("%f%c%f",x,op,y)

对于 x,op,x = 1,'+',1 是:

1.000000+1.000000

没有

1+1

您可以在代码中将此行放在 snprintf 之前

strtof函数returns解析float后的位置

float x = 0, y;
char *next = s;
while(*s) {
    y = strtof(next, &s);
    if (s == next) break;
    op = *s++;
    if (op == 0) break;
    x = calculate(x, y, op);
    next = s;
}

请注意,如果您想添加优先级,这会变得更加复杂。