-1

我正在开始我的堆栈代码,但这是一个问题

#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*

编译,看看它是否会工作

我该如何解决?我应该编辑什么?

4

3 回答 3

1

更新:至于你的 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)
{

if-code 应该放在这里

}

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

为了帮助您了解您似乎使用的是 C++ 编译器而不是 C 编译器(鉴于 malloc 的强制转换),您需要告诉我们您使用的是什么开发环境。

于 2011-04-06T12:50:03.910 回答
0

从 void* 到 StackNode* 的无效转换

这意味着您正在使用 C++ 编译器。在 C++ 中,void*不允许在没有强制转换的情况下从指针类型转换为另一种指针类型。在 C 中,允许转换,因此您不需要malloc在 C 中强制转换调用的结果。有人认为强制转换结果可以掩盖一个更基本的问题,即假设未声明的函数返回int

于 2011-04-06T13:02:24.837 回答
0

由于您在 main 的末尾没有 return 语句,我假设您将代码编译为 C++,但问题是您的代码是 C!

在 C 中,您不必强制转换 malloc 的返回值,但必须在 C++ 中。

请注意清楚说明您是使用 C 还是 C++。

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

于 2011-04-06T13:01:53.943 回答