30/09/2018, 21:11

Cho em hỏi 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(" 1.Ma sach: %-d",p->Info.masach);
printf(" 2.Ten sach: %-s",p->Info.tensach);
printf(" 3.Tac gia: %-s",p->Info.tacgia);
printf(" 4.The loai: %-s",p->Info.theloai);
printf(" 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
printf(" 6.Nam xuat ban: %-s",p->Info.namxuatban);
printf(" 7.Don gia: %-d",p->Info.dongia);
printf(" 8.So luong : %-d",p->Info.soluong);
printf(" 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
printf(" 10.Ngay xuat (ngay/thang/nam) : %-s",p->Info.ngayxuat);

return(p);
}else {
	printf("

Khong 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("

 1.Ma sach: %-d",p->Info.masach);
	printf("
 2.Ten sach: %-s",p->Info.tensach);
	printf("
 3.Tac gia: %-s",p->Info.tacgia);
	printf("
 4.The loai: %-s",p->Info.theloai);
	printf("
 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
	printf("
 6.Nam xuat ban: %-s",p->Info.namxuatban);
	printf("
 7.Don gia: %-f",p->Info.dongia);
	printf("
 8.So luong : %-d",p->Info.soluong);
	printf("
 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
	printf("
 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(" ========================
==THONG TIN SACH==
=====================");
printf(" …");

while(p!=NULL){
	count++;
{
		printf("


		*");
			printf("

 1.Ma sach: %-d",p->Info.masach);
	printf("
 2.Ten sach: %-s",p->Info.tensach);
	printf("
 3.Tac gia: %-s",p->Info.tacgia);
	printf("
 4.The loai: %-s",p->Info.theloai);
	printf("
 5.Nha xuat ban: %-s",p->Info.nhaxuatban);
	printf("
 6.Nam xuat ban: %-s",p->Info.namxuatban);
	printf("
 7.Don gia: %-f",p->Info.dongia);
	printf("
 8.So luong : %-d",p->Info.soluong);
	printf("
 9.Ngay nhap (ngay/thang/nam) : %-s",p->Info.ngaynhap);
	printf("
 10.Ngay xuat (ngay/thang/nam) : %-s",p->Info.ngayxuat);
	}
	p=p->pPrev;
}fprintf(h,"
%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(" Ban 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("
Ma sach:"); x.masach=nhapso(*l);
while(p!=NULL){
	if(p->Info.masach==x.masach){
		printf("
 ma sach da ton tai,moi nhap lai:");
		x.masach=nhapso(*l);
		p=(*l).pTail;
		continue;
	}
	p=p->pPrev;
}
printf("
Ten sach:"); fflush(stdin);
 nhapchu(x.tensach);
printf("
Tac gia:");
nhapchu(x.tacgia);
printf("
the loai:");
nhapchu(x.theloai);
printf("
nha xuat ban:");
nhapchu(x.nhaxuatban);
printf("
Nam xuat ban:");
gets(x.namxuatban);
printf("
Don gia:");
x.dongia=nhapso(*l);
printf("
So luong:");
x.soluong=nhapso(*l);
printf("
Ngay nhap kho(ngay/thang/nam):");
 gets(x.ngaynhap);
 printf("
Ngay 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("
 12.Sua toan bo");
	printf("

Lua chon truong can sua:"); scanf("%d",&c);
	if(c==1){
		printf( "
Ma sach:"); fscanf(h,"%d",&p->Info.masach);
		fflush(stdin);
	}
	if(c==2){
		printf("
Ten sach:"); nhapchu(p->Info.tensach);
	}
	if(c==3){
		printf("
Tac gia:"); nhapchu(p->Info.tacgia);
	}
	if(c==4){
		printf("
The loai:"); nhapchu(p->Info.theloai);
	}
	if(c==5){
		printf("
Nha xuat ban:");nhapchu(p->Info.nhaxuatban);
	}
	if(c==6){
		printf("
Nam xuat ban:");fflush(stdin); gets(p->Info.namxuatban);
	}

	if(c==7){
		printf("
Don gia:");fflush(stdin); scanf("%f",p->Info.dongia);
	}
	if(c==8){
		printf("
Soluong:");p->Info.soluong=nhapso(*l);
	}
	if(c==9){
		printf("
Ngay nhap kho:"); gets(p->Info.ngaynhap);
	}
	if(c==10){
		printf("
ngay xuat kho:");fflush(stdin); gets(p->Info.ngayxuat);
	}
	if(c==11){
		printf("
Nhap thong tin moi cho sach");
		printf( "
ma sach:"); p->Info.masach=nhapso(*l);
		fflush(stdin);
		printf("
Ten sach:"); nhapchu(p->Info.tensach);
		printf("
Tac gia:");nhapchu(p->Info.tacgia);
		printf("
the loai:");nhapchu(p->Info.theloai);
		printf("
nha xuatban:");nhapchu(p->Info.nhaxuatban);
		printf("
nam xuat ban:");nhapchu(p->Info.namxuatban);
		printf("
Don gia:"); scanf("%f",p->Info.dongia);
		printf("
So luong");p->Info.soluong=nhapso(*l);
		printf("
ngay nhap:");fflush(stdin); gets(p->Info.ngaynhap);
		printf("
ngay 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," %d",p->Info.masach);
fprintf(h," %s",p->Info.tensach);
fprintf(h," %s",p->Info.tacgia);
fprintf(h," %s",p->Info.theloai);
fprintf(h," %s",p->Info.nhaxuatban);
fprintf(h," %s",p->Info.namxuatban);
fprintf(h," %f",p->Info.dongia);
fprintf(h," %d",p->Info.soluong);
fprintf(h," %s",p->Info.ngaynhap);
fprintf(h," %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(" ====================MENU===================");
printf(" 1.Hien thi thong tin kho");
printf(" 2.Tim theo ma sach");
printf(" 3.Tim theo ten sach");
printf(" 4.Them sach");
printf(" 5.Sua thong tin");
printf(" 6.Xuat kho");
printf(" 7.Thoat ");
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("
nhap ma sach de tim kiem:");
		scanf("%d",n);
		timtheomasach(l,n);
		getch();
		break;

	case 3:
		system("cls");
		printf("
1.Tim theo tên sach");
		fflush(stdin);
		gets(a);
		timtheotensach(l,a);
		break;
	case 4:
		system("cls");
		themsach(l);
		thongtinkho(l);
		printf("
NHAN VIEN MOI DUOC GHI VAO CUOI DANH SACH LUU TRONG FILE store.txt !!!");
		break;
	case 5:
		system("cls");
		printf("
1.Tim theo ho ten");
		printf("
2.Tim theo msnv");
		int c;
		printf("
====================");
		printf("
lua chon so:");
		scanf("%d",&c);
		suathongtin(l,c);
		store(l);
		printf("
DANH 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();

}

Gió viết 23:28 ngày 30/09/2018

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

Bài liên quan
0