C 堆栈问题

C 堆栈问题,c,stack,singly-linked-list,C,Stack,Singly Linked List,我正在为堆栈启动代码,但有个问题 #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()

我正在为堆栈启动代码,但有个问题

#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");
}
它声明从
void*
StackNode*

编译并查看它是否有效


我该如何解决这个问题?我应该编辑什么?

更新:对于您的malloc问题,只需转换到正确的类型:

newPtr = (StackNodePtr)malloc(sizeof (StackNode));

至于程序的其余部分,从指令()判断,您应该能够在键盘上输入不同的选项1、2、3或4

问题就从这里开始,您需要实际检查键“getch()”返回的内容,如下所示:

    char c = getch();
    if (4 == c)
    {
        exit(0);
    }
    if (3 == c)
    {
        display_stack();
    }
等等

此外,由于您有一个退出选项(4),您可能应该在一个循环中包含所有这些选项:

while (1)
{
如果代码应该放在这里

}
您还需要实际创建display_stack()函数


<> P>为了帮助你了解你似乎使用C++编译器而不是C编译器(给定了Maloc的注),你需要告诉我们你在使用什么开发环境。

< P>因为在你的结尾没有回话语句,我假设你编译你的代码为C++,但是问题是你的代码是C!p> <>在C中,不必强制返回Maloc,但必须在C++中使用.< 请注意,如果你做出C或C++,

如果使用GNU编译器集合,请注意使用gcc而不是g++来编译.c文件

从void*到StackNode的转换无效*


这意味着你正在使用C++编译器。在C++中,不允许在没有CAST的情况下从<> >空> */COD>转换为另一个指针类型。在C中,转换是允许的,因此您不需要在C中强制转换调用

malloc
的结果。一些人认为强制转换结果可以掩盖一个更基本的问题,即假定未声明的函数返回
int

,但它的格式不正确?应该发生什么和真正发生什么?你能公布错误是什么吗?大多数人不太可能在不知道应该查找什么的情况下研究你的代码并试图找出它。你使用哪种编译器?请清理缩进。@Kyle John M David Philippine,这不是您可以在代码中修复的东西,但您必须在编译器中进行选择。您正在使用哪个开发环境或编译器?Borland?@凯尔:使用C编译器代替C++编译器。
}