我正在使用我编写的通用堆栈库编写一个后缀计算器。我将通过说这是一项家庭作业来做序,我通常不会在网上寻求帮助,但辅导中心/帮助室今天关闭。
我有一个函数“calc”,它接受来自stdin
的字符输入,对其进行标记,并确定它是否为数字+
,-
,*
,或^
。令牌处理器正常工作,因为我之前已经对所有情况进行了测试。
实现堆栈库时似乎存在问题。
这是有问题的代码:
char num[MAX_NUM];
float n;
while (1) {
switch (token = get_tok(num, sizeof(num))) {
case TOK_NUM:
//printf("TOK_NUM: %s (%lf)\n", num, strtod(num, NULL));
n = strtod(num, NULL);
push(stk, (void *)n);
printf("TOK_NUM_STK: %lf\n", (float)peek(stk));
pop(stk);
break;
还有其他的switch语句来处理其他字符(+, - ,*和^),但我还没有转向它们。
我们的想法是将字符数组num
转换为浮点数。
push函数是我的堆栈库的一部分。这是代码:
struct stack_t {
int count;
struct node_t {
void *data;
struct node_t *next;
} *head;
};
void push(stack stk, void *data) {
struct node_t *tmp = malloc(sizeof(struct node_t));
tmp -> data = data;
tmp -> next = stk -> head;
stk -> head = tmp;
(stk -> count)++;
}
堆栈库按照我的预期工作,因为我以前在其他程序中使用它,所以我并不担心。
我的问题是,当我编译我的后缀计算器时,我得到错误“无法转换为指针类型”并且它引用了这一行:
push(stk, (void *)n);
我现在要做的就是从stdin
获取用户的输入,将其推入堆栈,从堆栈中读取,然后将其从堆栈中弹出。我不知道为什么我现在收到这个错误,我不知道如何解决它。任何帮助或提示让我朝着正确的方向前进都将非常感激。
答案 0 :(得分:4)
float
和double
与整数类型不兼容,你不能将它们转换为指针,你想要的是在堆栈上使用float,或者指向浮点数的指针:
float *f = malloc(sizeof *f);
*f = n;
push(stk, f);
要使用堆栈上的元素,请将其转换回来:
float *f = pop(stk); // I assume your pop function returns a void *
float n = *f; // n is the number your pushed