前言:目標是提示輸入的用戶,添加各元素(輸入線)轉換成一個鏈表。Ç - 鏈表 - 插入元件不更新 - 僅加入最後一個輸入元件
我一直在玩弄從Learn-C.org一些示例代碼,它顯示了一個鏈表的例子。 我修改了代碼,以便它使用「字符串」而不是整數。
我插入功能如下:
void push(node_t * head, char *data) {
node_t * current = head;
if(head == NULL) {
printf("First element ever!\n");
}
else if(current->data == NULL) {
current->data = data;
current->next = NULL;
}
else {
while (current->next != NULL) {
current = current->next;
}
current->next = malloc(sizeof(node_t));
current->next->data = data;
current->next->next = NULL;
}
}
現在,在主,我發起名單如下:
push(test_list, "FOO");
push(test_list, "FEE");
push(test_list, "FAA");
:
node_t * test_list = malloc(sizeof(node_t));
添加元素與實現
打印清單時,使用print_list(test_list),我得到下面的輸出:
FOO
FEE
FAA
問題
不過,我則包括一個while循環,提示用戶輸入和其加入到鏈表。
char command[120];
int counter = 0;
while(counter < 3) {
printf("Enter element: ");
fgets((void *)command, sizeof(command), stdin);
push(test_list, command); //Insert
counter++;
}
但是,這不會將每個元素添加到鏈接列表中。相反,它將LAST元素添加到列表中三次。
例如,當提供:
Enter element: Argentina
Enter element: Mexico
Enter element: Sweden
將打印列表爲:
FOO
FEE
FAA
Sweden
Sweden
Sweden
編輯(添加打印功能)
我打印功能如下:
void print_list(node_t * head) {
node_t * current = head;
printf("**** Printing list ****\n");
while (current != NULL) {
printf("%s\n", current->data);
current = current->next;
}
}
我缺少什麼,還或者:我怎樣才能解決這個問題?任何幫助,高度讚賞。
我認爲你應該使用'strcpy'複製的城市名稱,使用指針可能無法在這種情況下工作,給他們指引。 – ameyCU
'node_t * test_list = malloc的(的sizeof(node_t)); test_list->數據= NULL;'...'推(test_list,的strdup( 「FAA」));推(test_list,的strdup(命令));' – BLUEPIXY
如果你在推送到列表之前先打印「命令」字符串,那麼你會看到你實際推送的內容,並確保你得到你想要的內容,因爲它在循環之外工作。 –