Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否有任何方法可以使用strof()来转换";负数;_C_String - Fatal编程技术网

C 是否有任何方法可以使用strof()来转换";负数;

C 是否有任何方法可以使用strof()来转换";负数;,c,string,C,String,我正在尝试编写一个函数,将字符串转换为数学运算 int RPN_Evaluate(char * rpn_string, double * result) { struct Stack calculate = {}; char *token; char *endptr; double x,y; token = strtok(rpn_string, " "); while (token != NULL) { *number = strtof(

我正在尝试编写一个函数,将字符串转换为数学运算


int RPN_Evaluate(char * rpn_string, double * result)
{
   struct Stack calculate = {};
   char *token;
   char *endptr;
   double x,y;

   token = strtok(rpn_string, " ");
    while (token != NULL) {
        *number = strtof(token, &endptr);
        if (*token == '+') {
            StackPop(&calculate, &y);
            StackPop(&calculate, &x);
            result_operation = x + y;
            StackPush(&calculate, result_operation);
        } else if (*token == '-') {
            StackPop(&calculate, &y);
            StackPop(&calculate, &x);
            result_operation = x - y;
            StackPush(&calculate, result_operation);
        }else if (*endptr != NULL) {
            return RPN_ERROR_INVALID_TOKEN;
        } else if (*endptr == NULL) { 
            StackPush(&calculate, *number);
        }
        token = strtok(NULL, " ");
   }

    StackPop(&calculate, result);
    return RPN_NO_ERROR;
}
如果我通过“11+”,它就可以正常工作。然而,当我通过“2-1+”时,我遇到了这个问题
是否有任何方法可以使用strof()将“-1”转换为-1?strof()似乎不会自动执行此操作。

。我建议您花一些时间使用调试器逐步完成代码。
strof
肯定可以处理负数。看见您的问题是,您正在将
-1
的前导
-
解析为
-
运算符;您的
if/else
构造是错误的。您的问题(以及发布的函数原型)表明结果是
双精度的
,而不是
*number=strof(token,&endptr)建议:
*number=strtod(令牌和endptr)但是,在哪里声明了
number
,在哪里声明了
result\u操作
以及在哪里声明了函数:
StackPush()
StackPop()