2013-11-20 7 views
0

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

Вот мой код:

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

struct node 
{ 
    int num; 
    char word[30]; 
    struct node *next; 
}; 

int main(void) 
{ 
    struct node *learn = NULL; 
    struct node *temp; 
    struct node *temp1, *p; 
    int q, i = 0; 
    char word1[30]; 

    while (i != 7) 
    { 
     printf("Enter a number: "); 
     scanf("%d", &q); 
     temp = (struct node *) malloc(sizeof(struct node)); 
     temp->num = q; 
     temp->next = NULL; 
     temp1 = p = learn; 
     while (temp1 != NULL) 
     { 
      p = temp1; 
      temp1 = temp1->next; 
     } 
     if (p != NULL) 
      p->next = temp; 
     else 
      learn = temp; 
     i++; 
    } 

    i = 0; 
    while (i != 7) 
    { 
     if (i == 0) 
     { 
      int c; 
      do 
      { 
       c = getchar(); 
      } while (c != '\n' && c != EOF); 
     } 
     printf("\nEnter a word: "); 
     fgets(word1, 30, stdin); 
     temp = (struct node*)malloc(sizeof(struct node)); 
     strcpy(temp->word, word1); 
     temp->next = NULL; 
     temp1 = p = learn; 
     while (temp1 != NULL) 
     { 
      p = temp1; 
      temp1 = temp1->next; 
     } 
     if (p != NULL) 
      p->next = temp; 
     else 
      learn = temp; 
     i++; 

    } 

    while (learn != NULL) 
    { 
     printf("%d\n", learn->num); 
     learn = learn->next; 
    } 
    while (learn != NULL) 
    { 
     printf("%s", learn->word); 
     learn = learn->next; 
    } 
} 

Вот что я вход:

Enter a number: 1 
Enter a number: 2 
Enter a number: 3 
Enter a number: 4 
Enter a number: 5 
Enter a number: 6 
Enter a number: 7 

Введите слово:

Введите слово: б

Введите слово : c

Ru тер слова: d

Введите слово: е

Введите слово: е

Введите слово: г

И вот что я получаю:

1 
2 
3 
4 
5 
6 
7 
0 
0 
0 
0 
0 
0 
0 

Я знаю, что я делаю что-то неправильно, я просто не знаю, что.

ответ

0

Вы выделяете дважды память для элементов списка. Вместо этого вы должны выделять только один раз, а во втором цикле вы должны просто добавлять строки, используя strcpy или simillar, или вы можете читать как число, так и строку в том же цикле.

2

Первый цикл в нижней части проходит через весь список. «learn» имеет значение NULL в конце первого цикла while, поэтому второй цикл никогда ничего не печатает.

Смежные вопросы