2017-03-09 15 views
1

このプログラムは、ユーザーデータを文字列の形式で取得し、リンクされたリストに入れることが想定されています。今私はリンクされたリストにデータを取得することができますが、なぜ彼らはそれらを印刷していないか分からない。リンクされたリスト項目は印刷されません

#include<stdio.h> 
#include<stdlib.h> 

// define the node of the stack 
typedef struct node{ 
    char name[100]; 
    struct node *next; 
}Node, *NodePtr; 

// define the stack based on the linked list of nodes 
typedef struct{ 
    NodePtr top; 
}StackType,*Stack; 

// implement all the stack operations 
Stack initStack(){ 
    // allocate memory 
    Stack sp=(Stack)malloc(sizeof(StackType)); 
    // set the top pointer to NULL 
    sp->top=NULL; 
    return sp; 
} 

int empty(Stack s){ 
    return (s->top==NULL); 
} 


void push(Stack s, char *n){ 
    NodePtr np= (NodePtr) malloc(sizeof(Node)); 
    strcpy(np->name,n); 
    np->next=s->top; 
    s->top=np; 
} 

私はどこかポップ機能に問題があると思いますが、後に機能を終了するので、カントが

// pop the top element from the stack 
char* pop(Stack s){ 
    if(empty(s)){ 
     printf("\n Error: Stack is empty"); 
     return("err"); 
    } 
    char hold[100]; 
    strcpy(hold,s->top->name); 
    NodePtr temp=s->top; 
    s->top=s->top->next; 
    free(temp); 
    return hold; 
} 


int main(){ 
    char n[100]; 
    // create the stack 
    Stack s=initStack(); 

    printf("Enter a list of names\n"); 
    scanf("%s",&n); 
    while(strcmp(n,"end")!=0){ 
     push(s,n); 
     scanf("%s",&n); 
    } 

    // print the stack 
    while(!empty(s)) 
     printf("%s \n ", pop(s)); 

} 
+0

のようにそれを呼び出します最初のリスト? –

+0

いずれにしても、実際に何が表示されますか?コンパイルエラー?ランタイムエラー?間違った出力?詳細を提供する。 –

+2

'char hold [100];はローカルオート変数です。範囲外では使用できません。 – BLUEPIXY

答えて

1

無効となるローカル配列へのポインタを返すpop機能をそれを把握するように見えます配列は生きていません。

また、機能popがいくつかのメッセージを出力するときは、悪い考えです。

ただ、関数に次のよう

int pop(Stack s, char *item) 
{ 
    int success = !empty(s); 

    if (success) 
    { 
     strcpy(item, s->top->name); 

     NodePtr temp = s->top; 
     s->top = s->top->next; 
     free(temp); 
    } 

    return success; 
} 

を書き換え、あなたがにデータを持って、あなたは確かにするもの、リスト項目を印刷するために管理することができない場合は

while (pop(s, n)) 
{ 
    puts(n); 
} 
関連する問題