2013-11-20 139 views
0

我想弄清楚鏈表,我試圖做一個鏈表,每個節點有兩個項目,但我不能讓它打印正確,我不是確定我做錯了什麼。學習鏈接列表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

En之三一句話:d

輸入一個單詞:電子

輸入一個單詞:F

輸入一個單詞:摹

這裏是我所得到的:

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

我知道我做錯了什麼,我只是不知道。

回答

0

您爲列表元素分配兩次內存。相反,你應該只分配一次,而在第二個循環中,你應該使用strcpy或simillar來添加字符串,或者你可以在同一個循環中同時讀取數字和字符串。

2

底部的第一個while循環遍歷整個列表。在第一個while循環結束時,「learn」爲NULL,因此第二個循環從不打印任何東西。