30/09/2018, 23:32
Không hiểu điều gì đang diễn ra với đoạn code C. Nhờ các bác giải thích giùm!
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
", i->name, i->open, i->close, (i->next->name) );
else
printf("Island name: %s, Open: %s, Close: %s, Next island: %s
", 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("
Lap voi While:
");
while(n < 4)
{
printf("
");
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("
lap bang tay:
");
{ // Lặp bằng tay :))
printf("
");
new_island = create("0");
addIsland(new_island, &amity);
display(&amity);
printf("
");
new_island = create("1");
addIsland(new_island, &amity);
display(&amity);
printf("
");
new_island = create("2");
addIsland(new_island, &amity);
display(&amity);
printf("
");
new_island = create("3");
addIsland(new_island, &amity);
display(&amity);
}
return 0;
}
Bài liên quan
Mình đang “ngâm” thì lại đẻ ra 1 câu hỏi nữa:
Nếu là pointer
name
khi mang địa chỉ đi share cho khắp nơi mỗi khi hàmisland * create(char* name)
được gọi là 1 lỗi. Doname
không được cấp phát địa chỉ và bộ nhớ riêng mà chỉ dùng 1 địa chỉ để share ( đúng ko ta? ). Thì tại sao gọi cùng hàm trongwhile()
và ngoàiwhile()
lại cho kết quả khác nhau dữ vậy???Bạn thử cấp phát lại xem, khi khai báo ấy:
island* new_island = new island;
printf cái này ra là biết. sao không gán trực tiếp luôn?
new
ở trong thư viện nào của C vậy bạn? Hình như ko cóXin lỗi, mình nhầm sang C++.
Bạn sửa lại như bác trên nói xem sao
newName
không vấn đề gì bạn ạ.Mình tìm đc cách sửa lỗi trên để có code chạy như ý định. Nhưng đoạn code trên là để cho câu hỏi mình chưa giải thích được ấy.
Sorry các bạn! Lỗi này là do bụng đói. Đươc ăn nên đỡ ngâu hơn rồi
Do trong
while()
được truyền string được khai báo để loop ( char array), còn ngoàiwhile()
truyền trực tiếp string ( bằng tay) nên nó khác nhau.