2016-07-02 19 views
-2

私はCで1つのリンクリストを調べようとしています。 xを押して停止するまで、数字を単一のリンクリストに入れるとします。なぜCのリンクリストを使って繰り返しループを繰り返しませんか?

第2入力の何らかの理由で重大な障害が発生します。

どうしてですか?ありがとう。

typedef struct node { 
      int data; 
      struct node *next; 
      }node_t; 
    node_t * getnode(){ 
     return (node_t*) malloc(sizeof(node_t)); 
    } 

main(){ 

    char c; 
    char drek;// use to ignore char 10 
    node_t *s= getnode(); 
    s->next=NULL; 
    node_t *t=s; 
    while(1){ 
      printf("enter data\n"); 
      scanf("%d", &s->data); 
      printf("x for exit\n"); 
      c=getchar(); 
      drek=getchar();//ignore char 10 
      if (c=='x'){ 
        s->next=NULL; 
        break; 
      } 
      s=s->next; 
    } 
} 
+0

どこが間違っているかについて、より具体的な情報をGoogleに提供する必要があります。 –

+0

また、あなたのコード全体にいくつかのprintfを追加して、間違っている箇所を見つけ出してください。 –

+0

:デバッガの使い方を知っていると、後で何時間も安全になるので、問題を解決することをお勧めします。 –

答えて

1

あなたは次のそれを使用する前にmalloc()S->ませんでした。 & S->データはあなたに誓う次のループにおけるよう

s=s->next; 

しかし、S->は次の、NULLです。最初の反復の前

+0

が働いた!ありがとう! –

1

s->nextがNULLである:

その後
s->next=NULL; 

while(1){ 
     // ... 
     scanf("%d", &s->data); 
     // ... 
     s=s->next; 
} 

あなたはs->dataに最初の入力を読み込む(s->nextはまだNULLであるため)、その後、NULLへsを再割り当てします。 2番目の反復は、NULLポインタがs->dataに達したときに逆参照しようとします。

関連する問題