问题与堆栈

问题描述:

我开始我的书库代码,但这里有一个问题问题与堆栈

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

编译,看看它是否会工作

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

+0

除了它的格式不正确吗?什么*应该*发生,什么*真正*发生? – BlackBear 2011-04-06 12:46:19

+0

你能发布错误是什么吗?大多数人不太可能研究你的代码,并试图弄清楚它们应该寻找什么。 – jonescb 2011-04-06 12:47:37

+0

你使用哪种编译器?清洁压痕。 – BenjaminB 2011-04-06 12:58:38

更新:关于你提到的问题的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

+0

我该如何解决这个问题?我应该删除或编辑什么? – 2011-04-06 13:12:30

+0

@Kyel John M David菲律宾,这不是你可以在代码中修复的东西,但是你必须在编译器中选择。你正在使用哪种开发环境或编译器? Borland公司? – 2011-04-06 13:18:25

无效换算*

这意味着使用的是一个C++编译器。在C++中,从void*到另一个指针类型的转换不允许没有转换。在C语言中,转换是允许的,所以你不需要在C语言中调用malloc的结果。有些人认为,如果未声明的函数被假定返回int,转换结果可能会掩盖一个更基本的问题。

+0

那我该如何解决这个问题? – 2011-04-06 13:08:33

+0

@Kyel:使用C编译器而不是C++编译器。 – dreamlax 2011-04-06 21:00:43