Các bác chỉ giúp em tại sao Lặp với while() trong hàm main() lại chỉ in ra nội dung của struct cuối cùng, còn lặp “bằng tay” thì lại in “đúng” không ạ?
Em chẳng thể tìm ra lỗi ở đâu. có khi gần 2h rồi 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma pack(1)
typedef struct island
{
char *name;
char *open;
char *close;
struct island *next;
}island;
void display(island *start)
{
island *i = start;
for (;i != NULL ; i = i->next )
{
if( i->next != NULL)
printf("Island name: %s, Open: %s, Close: %s, Next island: %s\n", i->name, i->open, i->close, (i->next->name) );
else
printf("Island name: %s, Open: %s, Close: %s, Next island: %s\n", i->name, i->open, i->close, i->next);
}
}
void addIsland(island* nI, island* start )
{
island *i = start;
for (;i != NULL ; i = i->next )
{
if(i->next == NULL)
{
i->next = nI;
return;
}
}
}
island * create(char* name)
{
island * i = malloc(sizeof(island));
i->name = name;
i->open = "09:15";
i->close ="17:30";
i->next = NULL;
return i;
}
int main()
{
island amity = {"Amity", "09:00", "17:15", NULL};
char newName[100];
island* new_island = NULL;
int n = 0;
printf("\n Lap voi While: \n");
while(n < 4)
{
printf("\n\n");
sprintf(newName,"%d", n); // Convert biến
new_island = create(newName);
addIsland(new_island, &amity);
display(&amity);
n++; // Tự động thay tên biến
}
printf("\n lap bang tay: \n");
{ // Lặp bằng tay :))
printf("\n\n");
new_island = create("0");
addIsland(new_island, &amity);
display(&amity);
printf("\n\n");
new_island = create("1");
addIsland(new_island, &amity);
display(&amity);
printf("\n\n");
new_island = create("2");
addIsland(new_island, &amity);
display(&amity);
printf("\n\n");
new_island = create("3");
addIsland(new_island, &amity);
display(&amity);
}
return 0;
}
). Thì tại sao gọi cùng hàm trong 
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?