-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));


プログラムの残りの部分については、instructions() から判断すると、キーボードでさまざまな選択肢 1、2、3、または 4 を入力できるはずです。

問題はここから始まります。次のように、「getch()」が返すキーを実際に確認する必要があります。

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

また、Exit の選択肢 (4) があるため、おそらくすべてをループに含める必要があります。

while (1)
{

ここに if-code を入れる必要があります

}

実際に display_stack() 関数を作成する必要もあります。

C コンパイラではなく C++ コンパイラを使用しているように見える (malloc からのキャストを考えると) という事実を解決するために、使用している開発環境をお知らせください。

于 2011-04-06T12:50:03.910 に答える
0

メインの最後にreturnステートメントがないので、コードをC ++としてコンパイルすると仮定しますが、問題はコードがCであるということです。

Cでは、mallocのリターンをキャストする必要はありませんが、C++ではキャストする必要があります。

CまたはC++を作成するかどうかを明確に述べるように注意してください。

GNUコンパイラコレクションを使用する場合は、g++ではなくgccを使用して.cファイルをコンパイルするように注意してください。

于 2011-04-06T13:01:53.943 に答える
0

void*からStackNode*への無効な変換

これは、C++コンパイラを使用していることを意味します。C ++では、void*キャストなしでは別のポインタ型への変換は許可されていません。Cでは変換が許可されているため、Cでの呼び出しの結果をキャストする必要はありません。結果をキャストmallocすると、宣言されていない関数がを返すと想定される、より根本的な問題を隠すことができると主張する人もいますint

于 2011-04-06T13:02:24.837 に答える