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();
}
List bạn sử dụng đã cấp phát chưa?