Đề bài: tạo danh sách liên kết đơn để nhập thông tin danh bạ với thông tin: tên, địa chỉ, email, số điện thoại cơ quan, số điện thoại bàn, số điện thoại di động.
Ở đây mình viết Code nhưng không hiểu vì sao lại chỉ nhập được 1 lần rồi sau đó có lỗi đó .
mọi người giúp mình với!
Code:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
/* Cac buoc giai bai toan danh sach lien ket:
1. Khai bao du lieu
2. Khoi tao danh sach lien ket
3. Tao Node
4. Them Node vao danh sach <--Sau khi tao Node xong phai the Node vao danh sach
5. Cac tuy chon : In ra, Sua, Duyet, Xoa, Tim Kiem, ...
*/
// 1. Khai bao kieu du lieu
struct SINHVIEN
{
char name[20];
char ID[10];
int Mark;
}sinhvien[100];
typedef struct SINHVIEN sv;
struct NODE
{
sv data;
struct NODE* pNext;
};
typedef struct NODE node;
struct LIST
{
node* pHead;
node* pTail;
};
typedef struct LIST list;
// 2. Khoi tao danh sach lien ket
void Init(list l)
{
l.pHead = NULL;
l.pTail = NULL;
}
// 3. Tao NODE
void Mk_Node(node* p)
{
p = (node* )malloc(sizeof(struct NODE));
/// *** Kiem tra neu het bo nho *** ///
if (p == NULL) printf("het bo nho roi em oi!\n");
else // Con thua bo nho
{
/*
strcpy(&(p->data.name),&(name));
strcpy(&(p->data.ID),&(ID));
p->data.Mark = Mark;
*/
p->pNext = NULL;
}
}
// 4. Them Node moi vao danh sach
void InsertFirst(list l,node* p)
{
char name[20], ID[10];
int mark;
p -> pNext = l.pHead;
p = l.pHead;
strcpy(p->data.name,name);
strcpy(p->data.ID,ID);
p->data.Mark = mark;
}
void InsertLast(list l, node* p)
{
char name[20], ID[10];
int mark;
l.pTail -> pNext = p;
p ->pNext = NULL;
p = l.pTail;
strcpy(p->data.name,name);
strcpy(p->data.ID,ID);
p->data.Mark = mark;
}
// 5. Nhap gia tri cho phan DATA cua danh sach lien ket
void Input(int n,node* p)
{
int i;
char name[20];
char ID[10];
int mark;
for (i=1; i <= n; i++)
{
fflush(stdin);
printf("sinh vien thu %d\n",i);
printf("nhap ten: \n");
gets(name);
fflush(stdin);
printf("nhap ID: \n");
gets(ID);
fflush(stdin);
printf("nhap diem: \n");
scanf("%d",&mark);
strcpy(p->data.name,name);
strcpy(p->data.ID,ID);
p->data.Mark = mark;
Mk_Node(p);
}
}
// 6. Output
void Output(list l,node* p)
{
if (l.pHead == NULL)
printf("Danh sach rong, ban can nhap danh sach\n");
else
{
for (p = l.pHead ; p == l.pTail ; p = p -> pNext )
{
printf("\n Ten sinh vien la: %c", *(p->data.name));
printf("\n ID cua sinh vien la : %c",*(p ->data.ID));
printf("\n Diem cua sinh vien la: %d",p->data.Mark);
}
}
}
int main(void)
{
int n;
list l;
node* p;
printf("nhap so sinh vien can chinh sua/ them: \n");
scanf("%d",&n);
Input(n,p);
Output(l,p);
getch();
return 0;
}