gpt4 book ai didi

c - atof() 在需要是 double 值的地方分配 0

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:00 24 4
gpt4 key购买 nike

我正在尝试通过命令行提供表达式来编写 rpn 计算器的学校作业。例如 ./calc 2 + 5\* sin 78

我的想法是使用struct 数据类型来保留数字值或运算符类型。这里主要澄清一下:

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


enum OPERATORS {val, PLUS, MINUS, MULTI, DIV, SIN, COS};
typedef struct value {

double number;
enum OPERATORS oper;
};


void get_the_onp(char *expression[], int length);


int main(int argc, char* argv[]) {

double result;
int i;
printf("Number of arguments: %d\n", argc);


get_the_onp(argv, argc);
//result = equation(argv, argc);

//printf("Result is: %f", result);
return 0;
}

当我运行 get_the_onp() 函数时,atof() 没有像我怀疑的那样工作。这是 get_the_onp():

void get_the_onp(char* expression[], int length) {

int i, j, k; //iterators i for expression; j for numbers; k for operators
char *current;
struct value values[length];


for (i=1; i<length; i++) {
current = expression[i];
//printf("%f\n", atof(expression[i]));
if (atof(current) != 0 && current != '0') {
//printf("Inside if: %f\n", atof(current));
values[i-1].number = (double) atof(current);
values[i-1].oper = val;
}

else{
switch(current[0]){

case '+':
//values[i].number = NULL;
values[i-1].oper = PLUS;
break;
case '-':
//values[i].number = NULL;
values[i-1].oper = MINUS;
break;
case '*':
//values[i].number = NULL;
values[i-1].oper = MULTI;
break;
case '/':
//values[i].number = NULL;
values[i-1].oper = DIV;
break;
case 's':
//values[i].number = NULL;
values[i-1].oper = SIN;
break;
case 'c':
//values[i].number = NULL;
values[i-1].oper = COS;
break;
}
}
}

//tester
for (i=0; i<length; i++) {
//if (values[i].oper != val)
printf("Operator: %d\n", values[i].oper);

printf("Number is: %d\n", values[i].number);
}


return;

}

示例表达式的输出是:

Number of arguments: 7
Operator: 0
Number is: 2147483636
Operator: 1
Number is: 2147483636
Operator: 0
Number is: 2147483636
Operator: 3
Number is: 2147483636
Operator: 5
Number is: 2147483636
Operator: 0
Number is: 2147483636
Operator: -2072959800
Number is: 2147483626

我猜指针 current 有什么东西,但我不知道现在该去哪里。

最佳答案

问题就在这里:

printf("Number is: %d\n", values[i].number);

values.number 的类型为 double(64 位),但您将其打印为 int(32 位),它调用未定义的行为。

关于c - atof() 在需要是 double 值的地方分配 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com