banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows xen một phần tử vào danh sách ghép nối trong c  XML
  [Programming]   xen một phần tử vào danh sách ghép nối trong c 04/05/2008 07:41:56 (+0700) | #1 | 128778
[Avatar]
motminhanh
Member

[Minus]    0    [Plus]
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
[Profile] [PM] [ICQ]
mình có đoạn mã sau
Code:
#include<conio.h>
#include<stdio.h>
#include<alloc.h>
#include<string.h>
#include<stdlib.h>
 struct nhan_su
  {
   char name[20];
   char age;
  };
main()
 {
 struct nhan_su *last=NULL,*ptr;
 char ten[20];
 //tao danh sach ghep noi
 printf("tao danh sach\n");
 do
 {
 printf("ten:");
 gets(ten);
 if(ten[0]!=NULL)
  {
   ptr=(struct nhan_su *) calloc(1,sizeof(struct nhan_su));
   strcpy(ptr->name,ten);
   printf("tuoi:");
   scanf("%d",&ptr->age);
   printf("\n");
   fflush(stdin);
   ptr->next=last;
   last=ptr;
   }
  }
  while(ten[0]!=NULL);
  //viet danh sach da tao ra
  printf("viet lai danh sach\n");
  while(ptr!=NULL)
 {
 printf("ten:%s\n",ptr->name);
 printf("tuoi:%d\n\n",ptr->age);
 }


 /*gia su ta nhap 2  nguoi
  nguoi mot:  name=mot,age=1
  nguoi hai:  name=hai,age=2
 */

 //xen nguoi ten ba vao giua mot va hai
 struct nhan_su *q;
 q=(struct nhan_su *) calloc(1,sizeof(struct nhan_su));
 strcpy(q->name,"ba");
 q->age=3;
 while((ptr!=NULL)&&(strcmp(ptr->name,"hai"))
 ptr=ptr->next;
 q->next=ptr->next;
 ptr->next=q;
 ptr=last;

 //viet lai danh sach sau khi da chen
 while(ptr!=NULL)
 {
 printf("ten=%s\n",ptr->name);
 printf("tuoi:%d\n\n",ptr->name);
 printf("tuoi:%d\n\n",ptr->age);
 ptr=ptr->next;
 }
}

mình có chút thắc mắc như sau:
1.mình không thể hiểu được đoạn
Code:
while((ptr!=NULL)&&(strcmp(ptr->name,"hai"))
 ptr=ptr->next;

strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi
vì nếu ta thay nó bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác
2.tại sao mình lại phải cần đoạn code đó?,mình bỏ đi kết quả vẫn thấy nó như vậy smilie
nhờ các cao thủ chỉ giáo giùm,thank trước!
[Up] [Print Copy]
  [Question]   Re: xen một phần tử vào danh sách ghép nối trong c 04/05/2008 18:12:56 (+0700) | #2 | 128852
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác 

2 chỗ màu vàng của bạn thực sự là 1 mà, phải không?
Về câu hỏi này, đúng là tác giả muốn so sánh ptr->name với "hai", vì như phần comment ở trên đã ghi rõ:

/*gia su ta nhap 2 nguoi
nguoi mot: name=mot,age=1
nguoi hai: name=hai,age=2
*/
 

Ở đây so sánh với "hai" nhằm kiểm tra xem đó có phải là người thứ 2 không thôi. Nếu bạn thay đổi tên người cuối cùng và dùng code này thì phải thay đổi tên tương úng.

Còn tại sao dùng đoạn code đó thì bạn xem thêm cách duyệt trong danh sách liên kết 1 chiều. Vì trong VD này tác giả dùng có 2 bản ghi nên khó nhận biết, bạn tăng số bản ghi lên thì sẽ thấy nó hoạt động đúng hay không.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   Re: xen một phần tử vào danh sách ghép nối trong c 04/05/2008 22:48:08 (+0700) | #3 | 128860
[Avatar]
motminhanh
Member

[Minus]    0    [Plus]
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
[Profile] [PM] [ICQ]
xin lỗi,hôm qua mình viết nhầm

strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay nó bằng strcmp(ptr->name,"hai") thì kết quả sẽ khác
 

thực tế đoạn này phải la:

strcmp(ptr->name,"hai") ở đây có nghĩa là gi`?,rõ ràng nó không có ý so sánh ptr->name và "hai" rồi vì nếu ta thay nó bằng strcmp(ptr->name,"hai")==0, thì kết quả sẽ khác
 

mong các bạn chỉ giáo hộ
[Up] [Print Copy]
  [Question]   Re: xen một phần tử vào danh sách ghép nối trong c 04/05/2008 23:44:24 (+0700) | #4 | 128865
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
if( strcmp(ptr->name,"hai")) --> sẽ thực hiện biểu thức của if(){} khi strcmp() trả về khác 0
if(strcmp(ptr->name,"hai")==0) --> thực hiện khi strcmp() trả về 0
do đó hai trường hợp trên là hoàn toàn khác nhau, tuy nhiên bạn lại thấy nó thực hiện ra cùng 1 kết quả là do bạn chỉ có 2 bản ghi, bạn tăng thêm bản ghi sẽ thấy chúng khác nhau.
[Up] [Print Copy]
  [Question]   Re: xen một phần tử vào danh sách ghép nối trong c 05/05/2008 08:37:01 (+0700) | #5 | 128923
[Avatar]
motminhanh
Member

[Minus]    0    [Plus]
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
[Profile] [PM] [ICQ]
cám ơn các bồ nhiều smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|