C 转换双精度<;-&燃气轮机;烧焦

C 转换双精度<;-&燃气轮机;烧焦,c,list,stack,converter,C,List,Stack,Converter,我需要创建一个计算器,为此我必须在不同的堆栈/列表上分离操作数(数字)和运算符(+Sum,*Mult,-Sub,^Expo) 我需要将它们保存在一个堆栈中(这是一个列表)。 我不能做的是,我该如何将字符“+”转换为双精度,然后将其从双精度转换为双精度?还是有更简单的方法?我试着打印这个: char c = "+"; double d = c; //Now d = -23.00 printf("Plus: %c\n", d); //Prints an unknown character "?".

我需要创建一个计算器,为此我必须在不同的堆栈/列表上分离
操作数(数字)
运算符(+Sum,*Mult,-Sub,^Expo)

我需要将它们保存在一个堆栈中(这是一个列表)。
我不能做的是,我该如何将字符“+”转换为双精度,然后将其从双精度转换为双精度?还是有更简单的方法?我试着打印这个:

char c = "+";
double d = c; //Now d = -23.00
printf("Plus: %c\n", d); //Prints an unknown character "?".  

如果
d
的类型为
double
正确输出为
printf(“Plus:%lf\n”,d),我如何才能到达我需要的位置
printf(“加上:%lg\n”,d)
printf(“加上:%le\n”,d),但不是
printf(“加上:%c\n”,d),因为
%c
表示“字符数据的输出”

在C语言中,“+”
不是字符,而是表示字符串的
char*
类型的文本(形式上是指针)

当您对不同的数据类型使用
=
(赋值运算符)时,会发生一些数据转换(例如数据类型升级),但这些转换并不总是有用的。因此,在您的示例中,据我所知,您希望将操作存储为字符
'+'
'-'
'*'
等,并将数据存储为
双值。在这种情况下,您根本不需要将
char
转换为
double
。您只需要设计一个数据结构,将数据和操作存储在一起,但数据类型不同


例如,正如您所写,“不同的堆栈/列表”可用于数据和运算符。。。不同

使用一堆带标签的联合体,而不是将一个字符塞进一个双字符中<代码>字符c=“+”是非法的;你的意思是
charc='+'。假设你解决了这个问题,
double d=c
应将
d
设置为
43
,即
'+'
字符的ASCII码。不能使用
%c
打印
双精度
值;你最多只能得到垃圾。典型的基于堆栈的计算器不会将运算符推到堆栈上。在读取运算符时,它将从堆栈中弹出操作数,应用该操作,并推送结果。为什么要将运算符推送到堆栈上?完成后,如何将运算符与其操作数相关联?不是重复的,但可以了解@PlayHardGoPro,比如
struct stackme{int type;union{double value;char op;};}
或者只是删除联合,无论如何都不会节省太多。或者更好的是,如果可以的话,按照@KeithThompson说的去做。