Проблема со стеком - PullRequest
0 голосов
/ 06 апреля 2011

Я запускаю свой код для стеков, но вот проблема

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

скомпилируйте и посмотрите, будет ли это работать

как мне это исправить? что я должен редактировать?

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Обновление: что касается вашей проблемы с 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-код должен быть здесь

}

Вам также необходимо создать функцию display_stack ().

Чтобы помочь вам с тем фактом, что вы, похоже, используете компилятор C ++ вместо компилятора C (с учетом приведения из malloc), вам необходимо сообщить нам, какую среду разработки вы используете.

0 голосов
/ 06 апреля 2011

недопустимое преобразование из void * в StackNode *

Это означает, что вы используете компилятор C ++. В C ++ преобразование из void* в другой тип указателя не разрешено без приведения. В C преобразование разрешено, поэтому вам не нужно приводить результат вызова к malloc в C. Некоторые утверждают, что приведение результата может замаскировать более фундаментальную проблему, когда предполагается, что необъявленные функции возвращают int .

0 голосов
/ 06 апреля 2011

Поскольку у вас нет оператора возврата в конце основного кода, я предполагаю, что вы компилируете свой код как C ++, но проблема в том, что ваш код - C!

В C вам не нужно приводить возвращение malloc, но вы должны делать это в C ++.

Позаботьтесь, чтобы четко указать, делаете ли вы C или C ++.

Если вы используете коллекцию компиляторов GNU, позаботьтесь об использовании gcc, а не g ++ для компиляции .c файла.

...