<分区>
我正在使用我编写的通用堆栈库编写一个后缀计算器。首先我要说这是一项家庭作业,我通常不会在线寻求帮助,但辅导中心/帮助室今天关闭。
我有一个函数“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
转为 float 。
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
获取用户输入,将其压入堆栈,从堆栈中读取,然后将其从堆栈中弹出。我不确定为什么我现在会收到此错误,而且我不确定如何修复它。非常感谢任何帮助或提示让我朝着正确的方向前进。