01/10/2018, 01:10
Code không in ra kết quả
![](/pictures/picfullsizes/2018/10/01/nfs1538409854.png)
//7.Viet ham chen 1 node sinh vien vao danh sach lien ket
//7.1.1. Chen sau
void AddTail(LIST &l, NODE *p)
{
if (l.Head == NULL)
{
l.Head = l.Tail = p;
}
else
{
p->prev = l.Tail;
l.Tail->next = p;
l.Tail = p;
}
}
//7.1.2 Chen truoc
void AddHead(LIST &l, NODE *p)
{
if (l.Head == NULL)
{
l.Head = l.Tail = p;
}
else
{
p->next = l.Head;
l.Head->prev = p;
l.Head = p;
}
}
//7.2. Ham duyet danh sach
NODE* Search(LIST l, int masv)
{
NODE *p = l.Head; //cho node p duyet mang tu node dau
while (p != NULL) //duyet cho den khi het danh sach
{
if (p->info.masv != masv) //neu masv bang vs ma sv nhap vao
{
p = p->next; //neu k tro toi node tiep theo
}
}
return p; //return p
}
//7.3. Chen vao trc q
void AddBeforeq(LIST &l, NODE *p, NODE *q)//p la node ms, q la node sau p
{
//kiem tra cac tr.hop dac biet
if (l.Head == NULL)
return;
if (l.Head == p)
AddHead(l, p);
//xac dinh node trc p
NODE *left = q->prev;
//gan node moi vao node trai left
p->prev = left;
left->next = p;
//gan node ms vao node ben phai q
p->next = q;
q->prev = p;
}
//7.4. ham chen in ra ds
void Chen1SV(LIST &l)
{
int y;
sv a;
printf("
Nhap thong tin sv moi : ");
Nhap1Sv(a);
NODE *p = GetNode(a);
printf("
Nhap ma sinh vien can tim de chen vo truoc: ");
scanf_s("%d", &y);
NODE *q = Search(l, y);
if (q != NULL)
{
AddBeforeq(l, p, q);
}
printf("
-------Mang sau khi them---------- ");
for (NODE *k = l.Head; k != NULL; k = k->next)
{
printf("
--------------");
Xuat1SV(k->info);
}
}
Ai giúp e với e sắp tới hạn nộp bài r. Em cảm ơn!!!
Bài liên quan
(cứ tưởng là dslk đơn, sr)
Là sao bạn?? Trong bài giảng cô mình cũng làm thế mà tham khảo mấy code trên mạng cũng tương tự v
Bạn chỉ ra cho mình lỗi sai ở đâu v?
Ai giúp e với mai e nộp bài r
Mình chưa hiểu phép so sánh này lắm. Bạn muốn thêm 1 node vào trước node
q
thì sao lại so sánh node đầu danh sách với nodep
? (vì lúc này nodep
làm gì có trong danh sách)Hàm này dùng để làm gì vậy bạn ?
Nếu để tìm kiếm 1 node (
masv
) có trong list hay không thì code wrong rồi ! Và fix lại như sau:P/S: Tên các tham số trong hàm chèn node bạn nên để tên dễ hiểu một chút, chứ đặt tên
p
q
… thì người đọc code họ khó hiểu đấy. Có một số chỗ trong code comment thừa nữa !Cảm ơn bạn nhiều lắm lắm lắm!!! Có nhiêu đây mà mình làm mãi k ra, ức chế mấy ng` nay ~~~ <3<3<3
Mà bạn có thể giải thích giúp mình cái lỗi trên k ???
Code bạn chạy ổn chưa ?
Như đã nói ở post trên:
Chỗ này nên sửa thành
if (l.Head == q)
vì bản thân nodep
là node thêm vào nên nó chưa hề tồn tại trong list => phép so sánhif (l.Head == p)
là vô nghĩa.Nếu bạn nhập vị trí thêm là vị trí đầu thì có thể sẽ bị lỗi !
Còn cái hàm này, trong vòng lặp
while
bạn chỉ xét điều kiện là nếu mã số cho trước (tham sốmasv
) khác với mã số của node đang xét thì cho nodep
trỏ đến node tiếp theo, vậy nếu nó trùng thì xử lý làm sao ?Cho nên mình mới xét thêm điều kiện
else
là nếu trùng thì lập tức return nodep
về luôn (do kiểu trả về của hàmSearch
làNODE *
). Còn không tìm thấy thìreturn NULL;
và dưới hàmChen1SV
,q
nhận giá trịNULL
nên hàmAddBeforeq(...)
sẽ không được gọi.Có thể vì điều này mà code bạn không xuất ra được kết quả ! Tuy nhiên để hiểu rõ hơn vì sao sai thì bạn nên debug nhé, VS mạnh nhất ở trình debug mà sao không tận dụng ?
Rồi bạn!! mình đã sửa p lại thành q, tại trong lúc làm mình vừa làm theo slide of cô + theo ý mình nên có sự nhầm lẫn (.). H thì mình hiểu sao nó k xuất ra kết quả r
Cảm ơn bạn lần nữa:wink:
Bạn ơi, phiền bạn coi này giúp mình cái này nữa đc k v?? Mình lại gặp lỗi tương tự trên. Mình có hỏi 1 anh thì ảnh nói là code mình chạy trên codeblock đc nhưng khi qua Visual thì lại lỗi. Cảm ơn bạn nhiều !!
Cái này đúng là chỉ có VS hay bị thôi. Giờ bạn build hẳn ra exe (tức là release mode đó), tắt VS rồi chạy lên xem có bị gì ko. Với lại bạn gõ giống y test hình thứ 2 ấy.
tắt VS r sao chạy bạn !!!
“Release Mode” chứ ko phải Debug đâu.
Được r bạn ơi, cảm ơn nhiều nhe!!
bà lên tận đây tìm cơ à