问题与堆栈
我开始我的书库代码,但这里有一个问题问题与堆栈
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct stackNode
{
int data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;
void instructions()
{
printf("Please enter a choice\n");
printf("[1]Push a value on the stack\n");
printf("[2]Pop a value off the stack\n");
printf("[3]Display the whole stack\n");
printf("[4]Exit");
}
void push(StackNodePtr *topPtr, int info)
{
StackNodePtr newPtr;
newPtr=malloc (sizeof (StackNode));
if(newPtr !=NULL)
{
newPtr->data=info;
newPtr->nextPtr=*topPtr;
*topPtr = newPtr;
}
}
int main()
{
instructions();
system("pause");
}
有什么错我的代码?
这是问题
newPtr = malloc(sizeof (StackNode));
它指出从void*
无效转换为StackNode*
编译,看看它是否会工作
我该如何解决这个问题?我应该编辑什么?
更新:关于你提到的问题的malloc,只投向右类型:
newPtr = (StackNodePtr)malloc(sizeof (StackNode));
对于程序的其余部分 - 从指令()判断,你应该能够进入键盘上的不同选项1,2,3或4。
你的问题就在这里开始,你需要实际检查哪些关键“残培()”的回报,就像这样:
char c = getch();
if (4 == c)
{
exit(0);
}
if (3 == c)
{
display_stack();
}
等
而且,因为你有一个退出的选择(4 ),你应该包含所有在一个循环:
while (1)
{
如果代码应该在这里
}
您还需要实际创建display_stack()函数。
为了帮助您解决这个问题,您似乎正在使用C++编译器而不是C编译器(给定从malloc进行强制转换),您需要告诉我们您正在使用的开发环境。
由于在主文件末尾没有返回语句,我假设您将代码编译为C++,但问题是您的代码是C!
在C中,您不必投射malloc的返回值,但必须使用C++。
注意清楚地说明您是否制作C或C++。
如果您使用GNU编译器集合,请注意使用gcc而不是g ++来编译.c文件。从无效*到StackNode
我该如何解决这个问题?我应该删除或编辑什么? – 2011-04-06 13:12:30
@Kyel John M David菲律宾,这不是你可以在代码中修复的东西,但是你必须在编译器中选择。你正在使用哪种开发环境或编译器? Borland公司? – 2011-04-06 13:18:25
无效换算*
这意味着使用的是一个C++编译器。在C++中,从void*
到另一个指针类型的转换不允许没有转换。在C语言中,转换是允许的,所以你不需要在C语言中调用malloc
的结果。有些人认为,如果未声明的函数被假定返回int
,转换结果可能会掩盖一个更基本的问题。
那我该如何解决这个问题? – 2011-04-06 13:08:33
@Kyel:使用C编译器而不是C++编译器。 – dreamlax 2011-04-06 21:00:43
除了它的格式不正确吗?什么*应该*发生,什么*真正*发生? – BlackBear 2011-04-06 12:46:19
你能发布错误是什么吗?大多数人不太可能研究你的代码,并试图弄清楚它们应该寻找什么。 – jonescb 2011-04-06 12:47:37
你使用哪种编译器?清洁压痕。 – BenjaminB 2011-04-06 12:58:38