PDA

View Full Version : DSLK rac roi qua'



vent
30-05-2008, 10:58
#include<conio.h>
#include<stdio.h>

typedef struct nhanvien
{
char ten;
char ngay;
float luong;
int gt;
} nv;
typedef struct tagnode
{
nv info;
struct tagnode *pNext;
} node;
typedef struct
{
node *pHead;
node *pTail;
}list;

node *getnode(nv a)
{
node *p;
p=new node;
p->info=a;(tại sao có thể gán p->ìno cho a được???, p là con trỏ, a là cấu trúc)
p->pNext=NULL;
return p;
}
void creatlist(list l)
{
l.pHead=NULL;
l.pTail=NULL;
}
void addhead(list l, node *new_ele)
{
if (l.pHead=NULL)
{
l.pHead=new_ele;
l.pTail=l.pHead;
}
else
{
new_ele->pNext=l.pHead;
l.pHead=new_ele;
}
}

void input (list &l)

{
int n;
node *p;
printf("muon nhap bao nhieu nhan vien:");
scanf("%d",&n);
creatlist(l);
for(int i=1;i<(n+1);i++)
{
nv a;
printf("ten nhan vien %d:",i);
scanf("%s",&a.ten);
printf("ngay sinh nhan vien %d:",i);
scanf("%s",&a.ngay);
printf("tien luong nhan vien %d:",i);
scanf("%f",&a.luong);
printf("gioi tinh nhan vien %d:",i);
scanf("%d",&a.gt);
p=getnode(a);
addhead(l,p);
}

}

void output(list l)
{
node *p;
int i=0;


for(p=l.pHead;p!=NULL;p=p->pNext)
{
i=i+1;
printf("hello");
printf("%s",p->info.ten);
printf("%s",p->info.ngay);
printf("%f",p->info.luong);
printf("%d",p->info.gt);
}
}

void main()
{
list l;
input(l);
printf("\n");
output(l);
printf("complete");
}


Em chạy tới output là no thoát ra không hiểu tại sao

firefly0901
15-06-2008, 02:27
Theo đoạn code bạn post mình có vài nhận xét thế này:
-Thứ nhất: khi tạo một node mới, ta sẽ gọi hàm new_node(); nhưng theo mình thấy, bạn chưa định nghĩa hàm này.
-Thứ hai: tên là chuỗi ký tự, nên phải khai báo là char *ten; hoặc là char ten[30];//30 chỉ là con số mình chọn, bạn không thích có thể cho ngắn hoặc dài hơn. Nếu bạn khai báo là char ten; thì khi nhập tên phải là scanf ("%c",&a.ten);
Đối với thuộc tính ngày cũng vậy.
Đôi lời nhận xét cùng bạn.
Thân!

cnnedogawa
18-06-2008, 23:31
Chào bạn, mình có vài góp ý như sau:
- Các hàm createlist và addhead thì tham số l phải là tham biến: creatlist(list &l),void addhead(list &l, node *new_ele)
- Trong hàm addhead dòng đầu tiên phải là: if (l.pHead==NULL)
- Như firefly nói thì tên phải là chuỗi, ngày có thể là chuỗi nhưng theo tui bạn nên khai báo thêm KDL ngày để dễ cho các bài toán sau này.
Vài ý cùng bạn

vent
19-06-2008, 11:11
hàm new node mình để chung trong get node rồi Bi giờ mình biết sơ sơ về cấu trúc dữ liệu rồi, cảm ơn mí bạn