30/09/2018, 19:15

Cho e hỏi lỗi bài này sai chỗ nào ạ

#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);
	
}
Bi-Clever viết 21:28 ngày 30/09/2018

lúc chạy thì đến đoạn in nó cứ in các số ltinh ý ạ

X viết 21:23 ngày 30/09/2018

void nhapds(List l,int n)

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

Bi-Clever viết 21:16 ngày 30/09/2018

đượ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

X viết 21:17 ngày 30/09/2018

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

Đang học C++ qua clip youtube của forum DayNhayHoc. Em đã học tới bài Đa hình nhưng có 1 điều là cho dù nghĩ mãi em vẫn chưa thể hiểu tác dụng của reference để làm gì ngoài việc swap (hoán đổi). Nhưng thật sự chúng ta có thể swap mà ko cần reference mà smile Z reference để làm gì ?

Hoặc ở đây có ví dụ rất rõ ràng:
Learn C++ – 25 Jul 07

7.3 — Passing arguments by reference

While pass by value is suitable in many cases, it has a couple of limitations. First, when passing a large struct or class to a function, pass by value will make a copy of the argument into the fun…

Bi-Clever viết 21:29 ngày 30/09/2018

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

X viết 21:30 ngày 30/09/2018

và có thể thay đổi giá trị

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. 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.

Bi-Clever viết 21:29 ngày 30/09/2018

List

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

Bài liên quan
0