我用语言 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;
}
请注意,如果您想添加优先级,这会变得更加复杂。
我用 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;
}
请注意,如果您想添加优先级,这会变得更加复杂。