30/09/2018, 16:42

Lỗi Danh Sách Liên kết (Khi Xuất Ra )?

Mọi người thông cảm do em tìm mãi lỗi ở chỗ xuất ra không được nên lên đây mạn phép post len

#include <conio.h>
#include <stdio.h>
#include <malloc.h>
// tạo đối tượng Sinh Viên ( 1 NOTE )
struct SinhVien {
	char FullName[1000];
	char Old[3]; 
	char SEX[5];
	float Toan,Ly,Hoa;
};
typedef struct SinhVien SV;
// tao Danh sách để quản lý .
struct NhaTruong {
	SV Person;
	NhaTruong *next; // con trỏ next .
};
typedef struct NhaTruong Home;
void Produce(Home *&Node){
	Node = (Home *)malloc(sizeof(Home));
}
void main() {
	int chon;
	Home *dssv; // khai báo 1 danh sach sinh vien
	Produce(dssv);
	Home *HEAD = NULL;
	Home *Tail = NULL;
	HEAD = dssv;
	while(1)
	{
		printf("Enter your FullName: "); gets(dssv->Person.FullName);
		printf("Enter your Old: "); gets(dssv->Person.Old);
		printf("Enter your SEX: "); gets(dssv->Person.SEX);
		fflush(stdin);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Toan);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Ly);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Hoa);
		Produce(dssv->next); // cấp phát cho con NODE tiếp theo
		dssv = dssv->next; // cho NODE 1 >> nối NODE 2.
		printf("You want Enter Information!");scanf("%d", &chon);
		fflush(stdin);
		if(chon == 0)
		{
			dssv = NULL;
			break;
		}
	}
	dssv = HEAD;
	while( dssv != NULL)
	{
		printf("
Ho Va Ten: %s", dssv->Person.FullName);
		dssv = dssv->next;
	}
	getch();
}

Mong mọi người giúp em @@

Bùi Trung Thông viết 18:52 ngày 30/09/2018

printf(“You want Enter Information!”);scanf("%d", &chon);
fflush(stdin);
if(chon == 0) // ý đồ bạn làm chỗ này là gì, muốn dừng việc nhập à ?
{
dssv = NULL; // tại sao lại gán NULL tại đây?
break;
}

bạn trả lời đi rồi tính tiếp

Minh Hoàng viết 18:53 ngày 30/09/2018
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
struct SinhVien {
	char FullName[1000];
	char Old[3]; 
	char SEX[5];
	float Toan,Ly,Hoa;
};
typedef struct SinhVien SV;
struct NhaTruong {
	SV Person;
	NhaTruong *next; 
};
typedef struct NhaTruong Home;
void Produce(Home *&Node){
	Node = (Home *)malloc(sizeof(Home));
}
int main() {
	int chon;
	Home *dssv; 
	Produce(dssv);
	Home *HEAD = NULL;
	Home *Tail = NULL;
	HEAD = dssv;
	while(1)
	{
		printf("Enter your FullName: "); gets(dssv->Person.FullName);
		printf("Enter your Old: "); gets(dssv->Person.Old);
		printf("Enter your SEX: "); gets(dssv->Person.SEX);
		fflush(stdin);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Toan);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Ly);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Hoa);
		
		printf("You want Enter Information!");scanf("%d", &chon);
		fflush(stdin);
		if(chon == 0)
		{
			dssv = NULL;
			break;
		}
		Produce(dssv->next); 
		dssv = dssv->next; 
	}
	dssv = HEAD;
	while( dssv != NULL)
	{
		printf("\nHo Va Ten: %s", dssv->Person.FullName);
		dssv = dssv->next;
	}
	return 0;}

hỏi người dùng trước khi cấp phát chứ

Thai Hoc Nguyen viết 18:51 ngày 30/09/2018

hỏi gì ? mình muốn chừng nào ko nhập nữa thì thoát rồi xuất luôn

Thai Hoc Nguyen viết 18:51 ngày 30/09/2018

if( chon == 0 ) để thoát cái vòng nhập thông tin còn cái
dssv = NULL; là để node cuối hiện tại trỏ tới NULL
1 >> 2 >> 3 >> NULL ý

Minh Hoàng viết 18:51 ngày 30/09/2018

Vậy thì chương trình bị lỗi gì? Chụp lỗi xem… Mình chỉ thấy nó bị thừa 1 node cuối khi xuất thôi, cách fix thì mình post code ở trên rồi

Thai Hoc Nguyen viết 18:47 ngày 30/09/2018

không bị lỗi mà bị như cái kiểu nhập 3 cái mà nó xuất luôn cái NULL

Minh Hoàng viết 18:42 ngày 30/09/2018

Đó là bị dư cái node cuối đấy, code của mình post ở trên đã fix rồi đó. Lỗi là do Học cấp phát sẵn rồi sau đó hỏi người dùng có nhập tiếp không, nếu người dùng không nhập tiếp thì node cuối đó bị thừa mà chưa gán được giá trị nào vào.

Thai Hoc Nguyen viết 18:49 ngày 30/09/2018

cảm ơn Hoàng nhé thanks

Thai Hoc Nguyen viết 18:42 ngày 30/09/2018

Cho Học hỏi trước hàm while Học có cấp phát 1 vùng nhớ cho nó rồi vùng nhớ đó để nhập các dữ liệu nếu người dùng ko muốn thì người dùng bấm ‘0’ . nhưng cái node chung ta vừa nhập tại sao lại không trở thành NULL ? trong khi chúng ta ko hề cấp phát cho nó .

Minh Hoàng viết 18:56 ngày 30/09/2018

mình vừa tìm ra bug nữa có liên quan tới câu hỏi lỗi này là khi mình chỉ nhập một sinh viên thôi và không muốn nhập nữa, khi in ra sẽ báo lỗi. Code mình fix bên dưới.

nhưng cái node chung ta vừa nhập tại sao lại không trở thành NULL ?

Về cái này thì do Học làm sai chỗ

dssv=NULL;

Làm như thế này thì thằng dssv không còn giữ một địa chỉ nào thôi (biến dssv chỉ là một biến tạm để chúng ta làm việc với dslk thôi), không làm ảnh hưởng đến danh sách liên kết đâu, nên node cuối cùng chúng ta nhập sẽ không bị gì cả
Cách làm đúng là : dssv->next=NULL.
Và khi đó tail chính là thằng dssv luôn. (tại thấy học khai báo tail mà chưa làm gì cả)

#include <conio.h>
#include <stdio.h>
#include <malloc.h>
struct SinhVien {
	char FullName[1000];
	char Old[3]; 
	char SEX[5];
	float Toan,Ly,Hoa;
};
typedef struct SinhVien SV;
struct NhaTruong {
	SV Person;
	NhaTruong *next; 
};
typedef struct NhaTruong Home;
void Produce(Home *&Node){
	Node = (Home *)malloc(sizeof(Home));
}
int main() {
	int chon;
	Home *dssv; 
	Produce(dssv);
	Home *HEAD = NULL;
	Home *Tail = NULL;
	HEAD = dssv;
	while(1)
	{
		printf("Enter your FullName: "); gets(dssv->Person.FullName);
		printf("Enter your Old: "); gets(dssv->Person.Old);
		printf("Enter your SEX: "); gets(dssv->Person.SEX);
		fflush(stdin);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Toan);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Ly);
		printf("Enter your point: "); scanf("%d", &dssv->Person.Hoa);
		
		printf("You want Enter Information!");scanf("%d", &chon);
		//printf("%p",dssv);
		fflush(stdin);
		if(chon == 0)
		{
			dssv->next = NULL;
			break;
		}
		Produce(dssv->next); 
		dssv = dssv->next; 
	}
	dssv = HEAD;
	while( dssv != NULL)
	{
		printf("\nHo Va Ten: %s", dssv->Person.FullName);
		dssv = dssv->next;
	}
	return 0;
} 
Thai Hoc Nguyen viết 18:44 ngày 30/09/2018

haha Học biết mà hèn chi cái khúc dssv = NULL ; thấy ngộ ngộ

Thai Hoc Nguyen viết 18:54 ngày 30/09/2018

mà Cho Học hỏi nếu sửa lại dssv->next = NULL cũng như trên của học vậy sao cái trên của Hoc chạy ko ra nhỉ

Bài liên quan
0