Bị trôi lệnh và xuất ra sai giá trị
E đang làm bài tập lớn CTDL & GT.
có 1 ý là nhập danh sách các đọc giả, đây là e chỉ demo trước nhập 1 đọc giả
code của e
Cho e hỏi thêm với ạ.
tại sao lúc e nhập thì nó chỉ cho nhập đến phai
chứ ko đến câu lệnh nhập trang thai
và khi nhập xong e xuất ra thì nó lại lấy giá trị nhập vào của ho
gán cho ten
và giá trị của ten
gán cho phai
e kiểm tra nhiều lắm rồi nên e mới đăng lên để hỏi ạ, mong mọi người giúp e, e cám ơn
#include<iostream>
#include<string.h>
using namespace std;
#define MaxList 200
//Danh mục sách
struct DANHMUCSACH
{
int MaSach;
int TrangThai;
int ViTri;
};
typedef struct DANHMUCSACH DMS;
struct NODEDANHMUCSACH
{
DMS dms;
NODEDANHMUCSACH *pNext;
};
typedef NODEDANHMUCSACH NodeDMS;
struct LISTDANHMUCSACH
{
NodeDMS *pHead;
NodeDMS *pTail;
};
typedef struct LISTDANHMUCSACH LISTDMS;
//Khởi tạo List Danh mục sách
void InitLISTDMS(LISTDMS &list)
{
list.pHead = NULL;
list.pTail = NULL;
}
//Đầu sách
struct DAUSACH
{
int ISBN;
char TenSach[100];
int SoTrang;
char TacGia[50];
int NamXB;
char TheLoai[50];
LISTDMS *ListDMS;
};
// Danh sách mượn trả
struct MUONTRA
{
int MaSach;
char NgayMuon[15];
char NgayTra[15];
int TrangThai;
};
struct NODEMUONTRA
{
MUONTRA muontra;
NODEMUONTRA *pNext;
};
typedef struct NODEMUONTRA NodeMuonTra;
struct LISTMUONTRA
{
NodeMuonTra *pHead;
NodeMuonTra *pTail;
};
typedef struct LISTMUONTRA ListMuonTra;
// khởi tạo danh sách mượn trả ban đầu
void InitListMuonTra(ListMuonTra &list)
{
list.pHead = NULL;
list.pTail = NULL;
}
//Danh sách độc giả
struct DOCGIA
{
int MaDG;
char Ho[10];
char Ten[15];
char Phai[5];
int trangthai;
ListMuonTra *listmuontra;
};
typedef struct DOCGIA DocGia;
struct NODEDOCGIA
{
DocGia dg;
struct NODEDOCGIA *pLeft;
struct NODEDOCGIA *pRight;
};
typedef struct NODEDOCGIA NodeDocGia;
typedef NodeDocGia* TREEDocGia;
// Khởi tại tree độc giả
void InitTreeDocGia(TREEDocGia &t)
{
t = NULL;
}
DocGia *CreateDG(int mdg, char *ho, char *ten, char *phai, int tt, ListMuonTra *l)
{
DocGia *dg;
dg = new DocGia;
if (dg == NULL) exit(1);
else
{
dg->MaDG = mdg;
strcpy_s(dg->Ho, ho);
strcpy_s(dg->Ten, ten);
strcat_s(dg->Phai, phai);
dg->trangthai = tt;
dg->listmuontra = l;
}
return dg;
}
// Thêm độc giả vào cây
void AddNDG(TREEDocGia &t,DocGia q)
{
if (t == NULL)
{
NodeDocGia *d = new NodeDocGia;
d->dg = q;
d->pLeft = NULL;
d->pRight = NULL;
t = d;
}
else {
if (t->dg.MaDG > q.MaDG)
{
AddNDG(t->pLeft, q);
}
else { if (t->dg.MaDG < q.MaDG)
AddNDG(t->pRight, q);
}
}
}
void Xuatlist(ListMuonTra l)
{
NodeMuonTra *p = new NodeMuonTra;
p = l.pHead;
while (p != NULL)
{
cout << "
Ma sach: " << p->muontra.MaSach;
cout << "
Ngay muon: " << p->muontra.NgayMuon;
cout << "
Ngay tra: " << p->muontra.NgayTra;
cout << "
Trang thai: " << p->muontra.TrangThai;
p = p->pNext;
}
}
//xuất các độc giả
void XuatDG(TREEDocGia t)
{
if (t != NULL)
{
cout << "
Ma doc gia: " << t->dg.MaDG;
cout << "
Ho doc gia: " << t->dg.Ho;
cout << "
Ten doc gia: " << t->dg.Ten;
cout << "
Phai: " << t->dg.Phai;
cout << "
Trang thai the: " << t->dg.trangthai;
NodeMuonTra *p = new NodeMuonTra;
p = t->dg.listmuontra->pHead;
while (p != NULL)
{
cout << "
Ma sach: " << p->muontra.MaSach;
cout << "
Ngay muon: " << p->muontra.NgayMuon;
cout << "
Ngay tra: " << p->muontra.NgayTra;
cout << "
Trang thai: " << p->muontra.TrangThai;
p = p->pNext;
}
XuatDG(t->pLeft);
XuatDG(t->pRight);
}
}
// hàm main
int main()
{
TREEDocGia t;
DocGia *dg=new DocGia;
int mdg, tt;
char ho[30], ten[30], phai[5];
ListMuonTra l;
InitListMuonTra(l);
InitTreeDocGia(t);
cout << "Nhap ma DG:"; cin >> mdg;
cout << "Nhap Ho doc gia: "; cin.getline(ho, 30);
cin.ignore();
cout << "Nhap ten doc gia:"; cin.getline(ten, 30);
cin.ignore();
cout << "Nhap Phai: "; cin.getline(phai, 5);
cin.ignore();
cout << "Trang thai the: "; cin >> tt;
dg = CreateDG(mdg, ho, ten, phai, tt, &l);
AddNDG(t, *dg);
XuatDG(t);
system("pause");
return 0;
}
lỗi dưới này e fix r ạ
lúc e nhập xong các thông tin thì nó chỉ lỗi sai ở dòng dg->MaDG = mdg;
trong phần DocGia *CreateDG
Project1.exe has triggered a breakpoint. occurred
Trong bài có lỗi gì thì mong góp ý cho e với ạ, e cám ơn nhiều !!!
Sai ở trong hàm AddNDG, cụ thể là ngay cái if đầu tiên :3
có thể chỉ rõ cho e được k , e cám ơn ạ
Để ý nè
e mới học cái này nên e cũng chưa hiểu rõ lắm á, ở 2 cái left right có phải là
d
k ạ:3 Đúng rồi,
t là NULL, mà NULL là không có gì thì sao mà xài nó được.
Và nói chung là vì phải khởi tạo node cho xong rồi mới đem gán, nếu không khi văng lỗi thì cây sẽ ở trong trạng thái “dở người”.
dạ e cám ơn nhiều ạ
Cho e hỏi thêm với ạ.
tại sao lúc e nhập thì nó chỉ cho nhập đến
phai
chứ ko đến câu lệnh nhậptrang thai
và khi nhập xong ei xuất ra thì nó lại lấy giá trị nhập vào của
ho
gán choten
và giá trị củaten
gán chophai
e kiểm tra nhiều lắm rồi nên e mới đăng lên để hỏi ạ, mong mọi người giúp e, e cám ơn