2016-07-02 2 views
-2

Я пытаюсь изучить одиночный связанный список в C. Я написал этот код, который предположил бы получить числа в один связанный список, пока пользователь не захочет остановиться, нажав x.Почему этот цикл не повторяется более одного раза через связанный список в C?

По какой-то причине на втором входе я получаю значительную ошибку.

Почему это происходит? Благодарю.

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

Вам нужно предоставить нам более подробную информацию о том, что происходит не так. –

+0

также просто добавьте несколько printf на весь ваш код, чтобы выяснить, где все пошло не так. –

+0

и: зная, как использовать отладчик, вы сможете сэкономить массу времени, поэтому я бы посоветовал использовать вашу проблему для этого. –

ответ

1

Вы не сделали malloc() s-> перед тем, как использовать его.

s=s->next; 

но s-> следующая является NULL, поэтому в следующем цикле & s-> данные будут ругаться на вас.

+0

работал! благодаря! –

1

Перед первой итерации, s->next является NULL:

s->next=NULL; 

Тогда:

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

Читаешь первый вход в s->data, затем переназначить s на NULL (потому что s->next еще NULL). Вторая итерация пытается разыменовать нулевой указатель, когда достигает s->data.