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说的去做。