Code in ra các giá trị lạ

bài này sai chỗ nào ạ, lúc chạy thì đến đoạn in nó cứ in các số ltinh ý ạ

#include<stdio.h>
#include<string.h>
#include<iostream>
#define max 100
using namespace std;
struct SV // kieu phan tu cua danh sach
{
	char maSV[9];
	char hoten[20];
	int nsinh;
	float TB;
};
struct List //kieu danh sach
{
	SV a[max];
	int last;
};
void create(List &l)
{
	l.last==-1;
}
int empty(List l)
{
	return l.last==-1;
}
int full(List l)
{
	return l.last==max;
}
void nhap(SV &sv)
{
	cout<<endl<<"Ma sinh vien: ";			fflush(stdin);
	gets(sv.maSV);
	if(strcmp(sv.maSV,"***")==0)
		return;
	cout<<"ho ten: ";				fflush(stdin); 
	gets(sv.hoten);
	cout<<"Nam sinh: ";			
	cin>>sv.nsinh;
	cout<<"diem TB: ";
	cin>>sv.TB;
}
void nhapds(List l,int n)
{
	int i;
	SV sv;
	for(i=1;i<=n;i++)
		{
			if(!full(l))
				{
					cout<<"Nhap vao phan tu thu "<<i;
					nhap(l.a[i]);
				}
		}
}
void hienthi(SV &sv)
{
	cout<<endl<<sv.maSV<<"-"<<sv.hoten<<"-"<<sv.nsinh<<"-"<<sv.TB;
}
void hienthids(List l,int n)
{
	int i;
	SV sv;
	for(i=1;i<=n;i++)
		{
			cout<<"Sinh vien "<<i;
			hienthi(l.a[i]);
		}
}

main()
{
	List l;
	int n;
	cout<<"Nhap so luong phan tu thuc: ";	
	cin>>n;
	create(l);
	full(l);
	nhapds(l,n);
	hienthids(l,n);
	
}

Thử sửa thành List &l. Anh nghĩ là sai chỗ này :smile:

1 Like

được rồi ạ. a ơi giải thích cho e được k ?..đoạn này e chưa hiểu bản chất

Vậy tại sao em biết dùng dấu & ở dòng này void nhap(SV &sv) :smile:
Có nhiều topic đã bàn luận về vấn đề này:


Hoặc ở đây có ví dụ rất rõ ràng:

1 Like

Theo như tài lệu a đưa ở trên thì e thấy đây là truyền tham chiếu.tác dụng là nhanh,đỡ tốn bộ nhớ và có thể thay đổi giá trị . Nhưng e vẫn chưa hiểu vì sao e đã nhập vào thông tin nhưng khi in nó lại ra các sô ltinh. Tác dụng tham chiếu trong t.h này là sao anh

Thiếu & nên thông tin em nhập vào chưa được đưa vào trong List, thằng List trong hàm nhapds nó chỉ là cục bộ và em chỉ mới nhập chơi chơi cho thằng này thôi. :smile: Còn thằng List bên ngoài (thằng List em dùng để xuất ra) nó chưa có những thông tin mà em nhập vào. :smiley:

1 Like

À dạ… em có chút hiểu hơn rồi anh…em cảm ơn anh. :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?