Sửa lỗi Program received signal SIGSEGV, Segmentation fault như thế nào?

Sửa lỗi Program received signal SIGSEGV, Segmentation fault CodeBlock như thế nào? Mong mn giúp đỡ

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include <windows.h>


/*KHOI TAO VA KHAI BAO KIEU CAU TRUC DANH SACH */
typedef struct Sach{
	int masach;
    char tensach[30];
	char tacgia[30];
	char theloai[30];
	char nhaxuatban[30];
	char namxuatban[4];
	int dongia;
	int soluong;
	char ngaynhap[10];
	char ngayxuat[10];
}SA;
typedef struct SachNode{
	SA Info;
	struct SachNode *pNext;
	struct SachNode *pPrev;
}SANode;
typedef struct SachList{
	SANode *pHead;
	SANode *pTail;
}SAList;
void CreateList(SAList *l){
	(*l).pHead=NULL;

	(*l).pTail=NULL;
}



//tao node cho danh sach
SANode *CreateNode(SA x){
	SANode *p= new SANode;// khai bao và cap phat vung nho cho con tro p
	
	if(p==NULL)
	return NULL;
	else
	{
	p->Info=x;// luu bien x vào Info
	p->Next=NULL;// tro den phan tu null
	
	return p;
	}
}
//them node vào dau danh sách
void AddHead(SANode *p,SAList *l){
	if((*l).pHead==NULL){
		(*l).pHead=p;
		(*l).pTail=p;
	}
	else
	{
		p->pNext=(*l).pHead;// tro toi dau danh sach
		(*l).pHead=p;//gan phan tu dau = p
		p->pNext->pPrev=p;
	}
}
//them phan tu vao cuoi danh sach
void addtail(SAList *l,SANode *p)
{
	if((*l).pHead=NULL)
	{
		(*l).pHead=(*l).pTail=p;
	}else{
		(*l).pTail->pNext=p;// tro toi cuoi danh sach de gan
	//	p->pPrev=(*l).pTail;
		(*l).pTail=p;//chinh thuc duoc gan vao cuoi
	}

}
//nhap du lieu cho ds
void Input(SAList *l){
int i,n,x;
printf("Nhap so phan tu cua info");
scanf("%d",&n);
Init(l); //khoi tao danh sach rong
for(i=1;i<=n;i++)
{printf("Nhap vao du lieu cho info %d",i);
scanf("%d",&x);
SANode *p =GetNode(x);
Addtail(&i,p);
}
}
//xuat du lieu
void Output(SAList (&l))
{
	for (SANode *p= (*l).pHead; p!= NULL;p=p->pNext)
	{
		printf("%5d",p->Info);
		}
		}
//TIM KIEM THEO MS ///////
SANode *timtheomasach(SAList *l,int x)
{
	SANode *p;
	p=(*l).pTail;
	while(p->Info.masach!=x){
			p=p->pPrev;
			if(p==NULL) break;
	}
	if(p!=NULL){
		printf("\n\n 1.Ma sach: %-d",p->Info.masach);
		printf("\n 2.Ten sach: %-s",p->Info.tensach);
		printf("\n 3.Tac gia: %-s",p->Info.tacgia);
		printf("\n 4.The loai: %-s",p->Info.theloai);
		printf("\n 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
		printf("\n 6.Nam xuat ban: %-s",p->Info.namxuatban);
		printf("\n 7.Don gia: %-d",p->Info.dongia);
		printf("\n 8.So luong : %-d",p->Info.soluong);
		printf("\n 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
		printf("\n 10.Ngay xuat (ngay/thang/nam) : %-s",p->Info.ngayxuat);

	return(p);
	}else {
		printf("\n\nKhong tim thay sach");
		return 0;
	}

}

/*TIM KIEM THEO TEN*/
SANode *timtheotensach(SAList *l,char a[]){
	int found=0;
	SANode *p;

	SA x;
	p=(*l).pTail;
	while(p!=NULL){

		if (strcmp(p->Info.tensach,a)==0){
		printf("\n\n 1.Ma sach: %-d",p->Info.masach);
		printf("\n 2.Ten sach: %-s",p->Info.tensach);
		printf("\n 3.Tac gia: %-s",p->Info.tacgia);
		printf("\n 4.The loai: %-s",p->Info.theloai);
		printf("\n 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
		printf("\n 6.Nam xuat ban: %-s",p->Info.namxuatban);
		printf("\n 7.Don gia: %-f",p->Info.dongia);
		printf("\n 8.So luong : %-d",p->Info.soluong);
		printf("\n 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
		printf("\n 10.Ngay xuat (ngay/thang/nam) : %-s",p->Info.ngayxuat);
		found=1;
			return(p);
		}
	p=p->pPrev;
	}
	if(found=0)
	printf("khong tim thay sach");
	return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//YEU CAU 1 :HIEN THI THONG TIN sach ///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void thongtinkho(SAList *l){
	SANode *p;
	FILE *h=fopen("thongtinsach.txt","w+t");
	int count=0;
	p=(*l).pTail;
	printf("\n\n\n   ========================*==THONG TIN SACH==*=====================");
	printf("\n\n  ........................................................");

	while(p!=NULL){
		count++;
	{
			printf("\n\n\n\t\t*");
				printf("\n\n 1.Ma sach: %-d",p->Info.masach);
		printf("\n 2.Ten sach: %-s",p->Info.tensach);
		printf("\n 3.Tac gia: %-s",p->Info.tacgia);
		printf("\n 4.The loai: %-s",p->Info.theloai);
		printf("\n 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
		printf("\n 6.Nam xuat ban: %-s",p->Info.namxuatban);
		printf("\n 7.Don gia: %-f",p->Info.dongia);
		printf("\n 8.So luong : %-d",p->Info.soluong);
		printf("\n 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
		printf("\n 10.Ngay xuat (ngay/thang/nam) : %-s",p->Info.ngayxuat);
		}
		p=p->pPrev;
	}fprintf(h,"\n%s","a");
	fclose(h);
	}



//KIEM TRA SO NHAP VAO

int nhapso(SAList &l)
{
	SANode *p;
	int check,n;
	check=scanf("%d",&n);
	while(check==0){
		printf("\nBan nhap sai, vui long nhap lai bang so:");
		scanf("%d",&n);
		fflush(stdin);
		check=scanf("%d",&n);
	       }
	return n;
}

//HAM KIEM TRA CHUOI NHAP VAO

int nhapchu(char a[]){
	fflush(stdin);
	int check;
	int i=0;
	check=0;
	while(check==0){
		fflush(stdin);
		gets(a);
		for(int i=0;i<strlen(a);i++){
		if((isalpha(a[i])==0)&&(a[i]!=' ')){
			check=0; break;
			//continue;
		}else check=1;
	}
	if(check==0){
		printf("Ban nhap sai. Vui long nhap lai bang chu : ");
	}else{
		check=1;
	}
	}

}

//YEU CAU 5:THEM SACH/////
void themsach(SAList *l){
	SA x;
	SANode *p;
	int check;
	p=(*l).pTail;
	char checks[30];

	printf("\nMa sach:"); x.masach=nhapso(*l);
	while(p!=NULL){
		if(p->Info.masach==x.masach){
			printf("\n ma sach da ton tai,moi nhap lai:");
			x.masach=nhapso(*l);
			p=(*l).pTail;
			continue;
		}
		p=p->pPrev;
	}
	printf("\nTen sach:"); fflush(stdin);
	 nhapchu(x.tensach);
	printf("\nTac gia:");
	nhapchu(x.tacgia);
	printf("\nthe loai:");
	nhapchu(x.theloai);
	printf("\nnha xuat ban:");
	nhapchu(x.nhaxuatban);
	printf("\nNam xuat ban:");
	gets(x.namxuatban);
	printf("\nDon gia:");
	x.dongia=nhapso(*l);
	printf("\nSo luong:");
	x.soluong=nhapso(*l);
	printf("\nNgay nhap kho(ngay/thang/nam):");
	 gets(x.ngaynhap);
	 printf("\nNgay xuat kho(ngay/thang/nam)");
	 gets(x.ngayxuat);
	p=CreateNode(x);
	AddHead(p, l);

	getch();
}

//YEU CAU 6: SUA THONG TIN sach/////
void suathongtin(SAList *l,int x){
	SANode *p;
	char a[30];
	int b,c;
	FILE *h=fopen("thongtinsach.txt","w+t");
	if(x==1){
	printf("nhap ten sach can sua:" ); fflush(stdin); gets(a);
	p=timtheotensach(l,a);
	}else if(x==2)
	{
		printf("nhap ma sach can sua"); scanf(" %d",&b);

		p=timtheomasach(l,b);
	}else {
		printf(" khong co thong tin sach can sua");
	}
     if(p!=0){
		printf("\n 12.Sua toan bo");
		printf("\n\nLua chon truong can sua:"); scanf("%d",&c);
		if(c==1){
			printf( "\nMa sach:"); fscanf(h,"%d",&p->Info.masach);
			fflush(stdin);
		}
		if(c==2){
			printf("\nTen sach:"); nhapchu(p->Info.tensach);
		}
		if(c==3){
			printf("\nTac gia:"); nhapchu(p->Info.tacgia);
		}
		if(c==4){
			printf("\nThe loai:"); nhapchu(p->Info.theloai);
		}
		if(c==5){
			printf("\nNha xuat ban:");nhapchu(p->Info.nhaxuatban);
		}
		if(c==6){
			printf("\nNam xuat ban:");fflush(stdin); gets(p->Info.namxuatban);
		}

		if(c==7){
			printf("\nDon gia:");fflush(stdin); scanf("%f",p->Info.dongia);
		}
		if(c==8){
			printf("\nSoluong:");p->Info.soluong=nhapso(*l);
		}
		if(c==9){
			printf("\nNgay nhap kho:"); gets(p->Info.ngaynhap);
		}
		if(c==10){
			printf("\nngay xuat kho:");fflush(stdin); gets(p->Info.ngayxuat);
		}
		if(c==11){
			printf("\nNhap thong tin moi cho sach");
			printf( "\nma sach:"); p->Info.masach=nhapso(*l);
			fflush(stdin);
			printf("\nTen sach:"); nhapchu(p->Info.tensach);
			printf("\nTac gia:");nhapchu(p->Info.tacgia);
			printf("\nthe loai:");nhapchu(p->Info.theloai);
			printf("\nnha xuatban:");nhapchu(p->Info.nhaxuatban);
			printf("\nnam xuat ban:");nhapchu(p->Info.namxuatban);
			printf("\nDon gia:"); scanf("%f",p->Info.dongia);
			printf("\nSo luong");p->Info.soluong=nhapso(*l);
			printf("\nngay nhap:");fflush(stdin); gets(p->Info.ngaynhap);
			printf("\nngay xuat:"); gets(p->Info.ngayxuat);

		}
	}
	getch();
}

//HAM LUU DU LIEU SAU KHI THEM HOAC CHINH SUA VAO FILE store.txt

void store(SAList *l)
{
{
	SANode *p;
	int a;
	p=(*l).pTail;
	//FILE *s=fopen("store.txt","w+t");
    FILE *h=fopen("thongtinsach.txt","w+t");
	while(p!=NULL){
		fprintf(h,"\n%d",p->Info.masach);
		fprintf(h,"\n%s",p->Info.tensach);
		fprintf(h,"\n%s",p->Info.tacgia);
		fprintf(h,"\n%s",p->Info.theloai);
		fprintf(h,"\n%s",p->Info.nhaxuatban);
		fprintf(h,"\n%s",p->Info.namxuatban);
		fprintf(h,"\n%f",p->Info.dongia);
		fprintf(h,"\n%d",p->Info.soluong);
		fprintf(h,"\n%s",p->Info.ngaynhap);
		fprintf(h,"\n%s",p->Info.ngayxuat);


		}
		p=p->pPrev;

  }
	int fclose(FILE *h);
}

    void xuatkho(SAList *l, char ts[30
	] ){{
	SANode *p;

	char ts[30];
	int sl;
	int found=0;
	FILE *h=fopen("thongtinsach.txt","w+t");
	FILE *k=fopen("xuatkho.txt","w+t");

	if(found==1)
	{
	 printf("Nhap so luong sach can xuat");
	 scanf("%d",sl);
	 if(p->Info.soluong>= sl)
	 {
	 p->Info.soluong-=sl;
     fscanf(k,"%d",&p->Info.tensach);
	fscanf(k,"%d",&p->Info.soluong);
			fflush(stdin);
	printf("Nhap ngay xuat(ngay/thang/nam)");
	 fscanf(k,"%s",&p->Info.ngayxuat);
	 fscanf(h,"%s",&p->Info.ngayxuat);
	 }
	 else printf("So luong sach trong kho khong du de thuc hien giao dich");
	 }
	 	p=p->pPrev;
	 	}

	int fclose(FILE *h);
	int fclose(FILE *k);



    }


int menu(){
	int cn;
	printf("\n====================MENU===================");
	printf("\n1.Hien thi thong tin kho");
	printf("\n2.Tim theo ma sach");
	printf("\n3.Tim theo ten sach");
	printf("\n4.Them sach");
	printf("\n5.Sua thong tin");
	printf("\n6.Xuat kho");
	printf("\n7.Thoat\n");
	printf("LUA CHON SO:");
	scanf("%d",&cn);
	return cn;
}



int main(){
	int cn;
	char a[30];
	int b;
	SANode *p;
	SA x;
	SAList *l;

	CreateList(l);
	Input(&l);
	Output(&l);

	thongtinkho(l);

	while(1){
		cn=menu();
		if(cn<1||cn>8){
		 system("cls");
		 continue;
		}
	switch(cn){
		case 1:

			thongtinkho(l);

			getch();
			break;
		case 2:
			system("cls");
			int n;
			printf("\nnhap ma sach de tim kiem:");
			scanf("%d",n);
			timtheomasach(l,n);
			getch();
			break;

		case 3:
			system("cls");
			printf("\n1.Tim theo tên sach");
			fflush(stdin);
			gets(a);
			timtheotensach(l,a);
			break;
		case 4:
			system("cls");
			themsach(l);
			thongtinkho(l);
			printf("\nNHAN VIEN MOI DUOC GHI VAO CUOI DANH SACH LUU TRONG FILE store.txt !!!");
			break;
		case 5:
			system("cls");
			printf("\n1.Tim theo ho ten");
			printf("\n2.Tim theo msnv");
			int c;
			printf("\n====================");
			printf("\nlua chon so:");
			scanf("%d",&c);
			suathongtin(l,c);
			store(l);
			printf("\nDANH SACH DA DUOC CHINH SUA DUOC LUU VAO store.txt !!!");
			break;
		case 6:
		system("cls");

		char ts[30];
	    printf("Nhap ten sach xuat kho");
	    fflush(stdin);
		 gets(ts);
	    timtheotensach(l,ts);
	    xuatkho(l,ts);

     	break;

		case 7:
			exit(0);
			break;
	}
	}
	getch();
}

List bạn sử dụng đã cấp phát chưa?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?