[IMG]images/smilies/icon_question.gif[/IMG][IMG]images/smilies/waiting.gif[/IMG]
tất cả các phần mình đều kiểm tra và không thấy lỗi nhưng khi dùng đến hàm Them(); nếu thêm ở đầu danh sách liên kết thì có lỗi sảy ra là nó chỉ in ra phần tử mình thêm vào mà không in ra các phần tử còn lại. [IMG]images/smilies/opacli.gif[/IMG] Hi vọng mọi người giúp mình Thank!
Mã:
			
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
//#include<ctype.h>
typedef struct SinhVien
{
	char ten[30];
	int tuoi;
	char MSSV[10];
	char CMND[13];
	char que[25];
	struct SinhVien *tiep;
}DanhSach;

void *Nhap();
void Xuat(DanhSach*);
DanhSach *Xoa(DanhSach* );
DanhSach *Them(DanhSach* );

int main()
{
	DanhSach *Sv, *Sv_dau;
	Sv_dau = Nhap();
	system("cls");//xoa man hinh
	Xuat(Sv_dau);
	//xoa mot phan tu
	Sv_dau = Xoa(Sv_dau);
	Xuat(Sv_dau);
	//them mot phan tu
	Sv_dau = Them(Sv_dau);
	Xuat(Sv_dau);
	free(Sv);
	free(Sv_dau);
	return 0;
}
//ham nhap danh sach sinh vien
void *Nhap()
{
	DanhSach *Sv, *Sv_dau;
	char ten[30];
	int i = 0, temp = 0;
	Sv = Sv_dau = NULL;
	while(1)
	{
		printf("
Sinh Vien thu %d: ",++i);
		printf("
Nhap Ten: ");
		fflush(stdin);//xoa bo dem
		gets(ten);/hap ten
		if(ten[0] == '\0')
			return Sv_dau;//tra lai la con tro Sv_dau
		if(Sv_dau == NULL)/eu phan tu dau chua NULL
		{
			Sv = (DanhSach*)malloc(sizeof(DanhSach));//cap phat vung nho cho phan tu dau tien
			Sv_dau = Sv;//tro Sv_dau den phan tu dau tien
		}
		else
		{
			Sv->tiep = (DanhSach*)malloc(sizeof(DanhSach));//cap phat vung nho cho cau truc moi
			Sv = Sv->tiep;//cho con tro Sv tro toi vung nho vua cap phat
		}
		strcpy(Sv->ten,ten);//copy ten vua nhap o tren vao Sv->ten
		printf("
Nhap Tuoi: ");
		scanf("%d%*c",&temp);
		Sv->tuoi = temp;
		printf("
Nhap que quan: ");
		gets(Sv->que);/hap que quan
		printf("
Nhap MSSV: ");
		gets(Sv->MSSV);/hap MSSV
		printf("
Nhap CMND: ");
		gets(Sv->CMND);/hap CMND
		Sv->tiep = NULL;//gan cho con tro toi tiep la NULL neu nhu khong nhap ten nua 
	}					//thi day la phan tu cuoi cua danh sach lien ket
}
//ham xuat ra danh sach sinh vien
void Xuat(DanhSach* Sv_dau)
{
	DanhSach* Sv;
	Sv = Sv_dau;
	while(Sv != NULL)
	{
		printf("
Ten: %s
Tuoi: %d
Que quan: %s
MSSV: %s
CMND: %s
",
				Sv->ten,Sv->tuoi,Sv->que,Sv->MSSV,Sv->CMND);
		Sv = (*Sv).tiep;
	}
}
//ham them phan tu vao danh sach
DanhSach *Them(DanhSach* Sv_dau)
{
	DanhSach *Sv, *Sv_truoc;
	char ten[30], temp;
	int tuoi;
	Sv = Sv_dau;
	printf("
Ban muon chen vao dau danh sach nhan phim 'T'
Nguoc lai nhan phim 'S'");
	temp = getch();
	if(toupper(temp) == 'T')
	{
		printf("
Nhap ten: ");
		fflush(stdin);
		gets(ten);
		if(ten[0] != '\0')
		{
			Sv_truoc = (DanhSach*)malloc(sizeof(DanhSach));
			strcpy(Sv_truoc->ten,ten);
			printf("
Nhap Tuoi: ");
			scanf("%d%*c",&tuoi);
			Sv_truoc->tuoi = tuoi;
			printf("
Nhap que quan: ");
			gets(Sv_truoc->que);
			printf("
Nhap MSSV: ");
			gets(Sv_truoc->MSSV);
			printf("
Nhap CMND: ");
			gets(Sv_truoc->CMND);
			Sv_truoc->tiep = Sv;
			Sv_dau = Sv_truoc;
			printf("
Da chen thanh cong");
		}else
			printf("
Ban da khong chen them nguoi vao danh sach");
	}
	else if(toupper(temp) == 'S')
	{
		printf("
Chen them vao sau 1 nguoi co ten la: ");
		fflush(stdin);
		gets(ten);
		Sv = Sv_dau;
		while(Sv != NULL)
		{
			if(strcmp(Sv->ten,ten) == 0)
			{
				Sv_truoc = (DanhSach*)malloc(sizeof(DanhSach));
				printf("
Nhap ten: ");
				gets(Sv_truoc->ten);
				printf("
Nhap Tuoi: ");
				scanf("%d%*c",&tuoi);
				Sv_truoc->tuoi = tuoi;
				printf("
Nhap que quan: ");
				gets(Sv_truoc->que);
				printf("
Nhap MSSV: ");
				gets(Sv_truoc->MSSV);
				printf("
Nhap CMND: ");
				gets(Sv_truoc->CMND);
				Sv_truoc->tiep = Sv->tiep;
				Sv->tiep = Sv_truoc;
				printf("
Chen thanh cong!");
				return Sv_dau;
			}
			Sv = Sv->tiep;
		}if(Sv == NULL)
		{
			printf("
Khong ton tai ten '%s' trong danh sach",ten);
		}
	}
	return Sv_dau;
}
//ham xoa phan tu
DanhSach *Xoa(DanhSach* Sv_dau)
{
	DanhSach *Sv_truoc, *Sv;
	char ten[30];
	printf("
Nhap ten nguoi muon xoa: ");
	fflush(stdin);
	gets(ten);
	if(ten[0] != '\0')
	{
		Sv = Sv_dau;
		while(Sv != NULL)
		{
			if(strcmp(Sv->ten,ten) == 0)
			{
				if(strcmp(Sv_dau->ten,ten) == 0)
				{
					Sv_dau = Sv->tiep;
					free(Sv);
					return Sv_dau;
				}
				else
				{
					Sv_truoc->tiep = Sv->tiep;
					free(Sv);
					return Sv_dau;
				}
				printf("
Ten da xoa la: %s",ten);
				free(ten);
			}
		
			Sv_truoc = Sv;
			Sv = Sv->tiep;
			if(Sv == NULL)
				printf("
Nguoi ban muon xoa khong co trong danh sach");
		}
	}
	
}