[英]Learning Linked Lists C
我正在試圖弄清楚鏈接列表,我正在嘗試制作一個鏈接列表,每個節點有2個項目,但我不能讓它打印正確,我不知道我做錯了什么。
這是我的代碼:
#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
輸入一個單詞:a
輸入一個單詞:b
輸入一個單詞:c
輸入一個單詞:d
輸入一個詞:e
輸入一個單詞:f
輸入一個詞:g
這就是我得到的:
1
2
3
4
5
6
7
0
0
0
0
0
0
0
我知道我做錯了什么,我只是不知道是什么。
底部的第一個while循環遍歷整個列表。 “learn”在第一個while循環結束時為NULL,因此第二個循環從不打印任何內容。
您為列表的元素分配兩次內存。 相反,你應該只分配一次,在第二個循環中你應該只使用strcpy
或simillar添加字符串,或者你可以在同一個循環中讀取數字和字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.