//美好的一天。這只是我的源代碼的一部分。我的主要困境是print_list函數只打印鏈接列表中用戶的第一個輸入。我似乎無法指出這個問題,因爲這個功能的邏輯似乎是正確的。 insert_list函數似乎也可以正常工作,但我並不確定。print_list函數僅在鏈接列表中打印用戶的第一個輸入
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//這是節點
typedef struct node
{
char name[61];
int month;
int day;
int year;
struct node *next;
}node;
//這是列表
typedef struct list
{
node *head;
node *tail;
}list;
//這通過接受用戶的輸入創建了節點,並將它們在所述節點
node *create_node()
{
int x;
node *data = (node*) malloc(sizeof(node));
printf("Name: ");
fgets(data->name, 61, stdin);
printf("Birthdate (mm/dd/yyyy): ");
scanf("%d%*[/]%d%*[/]%d", &data->month, &data->day, &data->year);
getchar();
if ((data->month)==0||(data->month)>=13||(data->day)<=0||(data->day)>=32||(data->year)<=1977||(data->year)>=3001)
{
while ((data->month)==0||(data->month)>=13||(data->day)<=0||(data->day)>=32||(data->year)<=1977||(data->year)>=3001)
{
printf("Invalid Input.\n");
printf("Please Enter a Valid Birthdate(mm/dd/yyyy): \n");
scanf("%d%*[/]%d%*[/]%d", &data->month, &data->day, &data->year);
getchar();
}
}
printf("******************************************************************\n");
for (x=0; x<=strlen(data->name); x++)
{
if (data->name[x]=='\n')
{
data->name[x]='\0';
}
}
printf("Birthday reminder for %s is added.\n", data->name);
return data;
}
list *create_list(list *plist)
{
plist->head = NULL;
plist->tail = NULL;
return plist;
}
// this inserts在列表中的節點
list *insert_list(list *plist, node *pnode, node *new_node)
{
if(plist->head==NULL)
{
plist->head=new_node;
new_node->next=NULL;
}
else
{
new_node->next = NULL;
pnode->next = new_node;
plist->tail = new_node;
}
return plist;
}
//此打印列表
list *print_list(list *plist)
{
node *current = plist->head;
int i;
for(i=1;current!=NULL;i++)
{
printf("[%d] %s\n",i ,current->name);
printf("Birth Date: %d/%d/%d\n", current->month, current->day, current->year);
current=current->next;
}
}
//這解除分配列表
list *free_list(list *List)
{
node *current = List->head;
node *temp = NULL;
while(current != NULL)
{
temp = current;
current = current->next;
free(temp);
}
List->head = NULL;
List->tail = NULL;
}
//這是主要的
int main(void)
{
list* List = (list*) malloc(sizeof(list));
List = create_list(List);
char x;
node *data = (node *) malloc(sizeof(node));
printf("******************************************************************\n");
printf(" ADD BIRTHDAY REMINDER FORM\n");
printf("******************************************************************\n");
List = insert_list(List, data, create_node(data));
printf("Would you like to add another(y/n)?\n");
scanf("%c", &x);
if (x=='y')
{
while (x=='y')
{
if (x=='y')
{
getchar();
printf("******************************************************************\n");
node *data = (node *) malloc(sizeof(node));
List = insert_list(List, data, create_node(data));
printf("Would you like to add another(y/n)?\n");
scanf("%c", &x);
}
}
}
print_list(List);
free(List);
return 0;
}
//此代碼已準備好進行編譯
是的,我用它作爲前一個節點。我嘗試用你的替換我的插入列表代碼,但它仍然只打印其中一個輸入。 – user123456098 2012-03-31 12:31:58
好吧,我想你也必須修改調用代碼。順便說一句,這是印刷,仍然是第一個或最後一個? – Matthias 2012-03-31 13:19:29
我很抱歉,你的代碼工作正常,我正在編譯錯誤的程序:)))謝謝你,上帝保佑! :D – user123456098 2012-03-31 13:24:06