【问题标题】:Converting double < - > char转换双 < - > char
【发布时间】:2015-06-21 23:03:42
【问题描述】:

我需要创建一个计算器,为此我必须将 operands (numbers)operators (+Sum, *Mult, -Sub, ^Expo) 分隔在不同的堆栈/列表

我需要将它们中的每一个保存在一个堆栈中(这是一个列表)。
我不能做的是,我应该如何将字符 "+" 转换为 double 然后将其从 double 恢复为 character ?或者有更简单的方法吗?我试图打印这个:

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

我怎样才能到达我需要的地方?

【问题讨论】:

  • 使用一堆标记的联合,而不是把一个字符硬塞进一个双重!
  • char c = "+"; 是非法的;你的意思是char c = '+';。假设你解决了这个问题,double d = c; 应该将d 设置为43'+' 字符的 ASCII 码。您不能使用%c 打印double 值;你充其量只会得到垃圾。
  • 典型的基于堆栈的计算器不会将运算符压入堆栈。在读取操作符时,它将从堆栈中弹出操作数,应用操作并推送结果。为什么要将运算符压入堆栈?完成此操作后,您将如何将运算符与其操作数关联起来?
  • 不是重复的,但可以得到一些想法here
  • @PlayHardGoPro 类似struct stackme{int type; union{double value;char op;};}; 或者只是删除联合,无论如何它不会节省太多。或者更好的是,如果可以的话,按照@KeithThompson 所说的去做。

标签: c list stack converter


【解决方案1】:

如果ddouble 类型,则正确输出是printf("Plus: %lf\n", d);printf("Plus: %lg\n", d);printf("Plus: %le\n", d);,但不是printf("Plus: %c\n", d);,因为%c 表示“字符数据的输出”。

在 C 语言中 "+" 不是字符,它是 char * 类型的文字,表示字符串(形式上它是一个指针)。

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

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

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2013-10-18
    • 2012-01-15
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多