01/10/2018, 00:09

Cần mọi người tư vấn giúp về đoạn mã có liên quan đến Struct và Enum

#include <iostream>
using namespace std;

// Khai bao cau truc 
struct SV
	{
		char *ten; 
		char ten[50];
		struct
		{
			char tenMon[50];
			float diem;
		} mon1, mon2, mon3;
		float diemTB;
		enum loai
		{
			XUAT_SAC,
			GIOI,
			KHA,
			TRUNG_BINH,
			YEU 
		} xepLoai;//bien kieu enum
	} sinhVien;
	
int main()
{
	cout << " Ho va ten Sinh Vien: ";
	cin >> sinhVien.ten;
	sinhVien.(*ten) = sinhVien.ten;
	cout << endl;
	cout << *(sinhVien.(*ten));
	cout << "Mon 1 la: ";
	cin >> sinhVien.mon1.tenMon;
	cout << endl;
	cout << "Diem Mon 1 la: ";
	cin >> sinhVien.mon1.diem;
	cout << endl;
	
	cout << "Mon 2 la: ";
	cin >> sinhVien.mon2.tenMon;
	cout << endl;
	cout << "Diem Mon 2 la: ";
	cin >> sinhVien.mon2.diem;
	cout << endl;

	cout << "Mon 3 la: ";
	cin >> sinhVien.mon3.tenMon;
	cout << endl;
	cout << "Diem Mon 3 la: ";
	cin >> sinhVien.mon3.diem;
	cout << endl;
	
	sinhVien.diemTB = (sinhVien.mon1.diem + sinhVien.mon2.diem + 
	sinhVien.mon3.diem)/3.0;
	
	cout << "*******************************************" << endl;
	cout << "SINH VIEN: " << sinhVien.ten << endl;
	cout << "DIEM TRUNG BINH 3 MON " << sinhVien.mon1.tenMon << 
		", " << sinhVien.mon2.tenMon << ", " << sinhVien.mon3.tenMon <<
		": " << sinhVien.diemTB << endl;
	
	(sinhVien.diemTB < 5.0) ? sinhVien.xepLoai = sinhVien.xepLoai.YEU  : cout << "";
	(sinhVien.diemTB < 6.5) ? sinhVien.xepLoai = sinhVien.xepLoai.TRUNG_BINH : cout << "";
	(sinhVien.diemTB < 8.0) ? sinhVien.xepLoai = sinhVien.xepLoai.KHA : cout << "";
	(sinhVien.diemTB < 9.0) ? sinhVien.xepLoai = sinhVien.xepLoai.GIOI : cout << "";
	(sinhVien.diemTB <= 10.0) ? sinhVien.xepLoai = sinhVien.xepLoai.XUAT_SAC : cout << "";
	
	(sinhVien.xepLoai == YEU) ? cout << "XEP LOAI YEU" : cout << "";
	(sinhVien.xepLoai == TRUNG_BINH) ? cout << "XEP LOAI TRUNG BINH" : cout << "";
	(sinhVien.xepLoai == KHA) ? cout << "XEP LOAI KHA" : cout << "";
	(sinhVien.xepLoai == GIOI) ? cout << "XEP LOAI GIOI" : cout << "";
	(sinhVien.xepLoai == XUAT_SAC) ? cout << "XEP LOAI XUAT SAC" : cout << "";
	return 0;
}
Gió viết 02:14 ngày 01/10/2018
  • struct có 2 tên giống nhau
  • Để lấy enum trong struct thì dùng SV::loai::TRUNG_BINH ...
  • ? : thì ...? <a> : <b> thì <a>,<b> phải cùng kiểu, tốt nhất cứ dùng if else
Trọng Nghĩa viết 02:10 ngày 01/10/2018

Bản thân cực ghét kiểu long hai struct thế này, bạn nên đem cái struct MONHOC riêng ra ngoài.

Toán tử ba ngôi bạn xài cũng vậy, đừng ham code ngắn mà viết đại vào khi không hiểu.

Code ngắn hơn không giúp bạn đẳng cấp hơn đâu!

Bui Gia Huy viết 02:09 ngày 01/10/2018

nhưng SV không phải là 1 class bạn à

Chi nên khi sử dụng SV::loai thì nó lại báo lỗi, đây là chỗ mình thấy thắc mắc, mong bạn có thể chỉ giáo

Bui Gia Huy viết 02:12 ngày 01/10/2018

Uhm , cảm ơn bạn đã góp ý
Nhưng đây là mình viết chương trình dựa theo yêu cầu của thầy mình thôi
À, bạn có thể giúp mình trả lời câu hỏi mà mình đã hỏi bạn Gió ở trên không, nếu được thì mình cảm ơn bạn rất nhiều

Trọng Nghĩa viết 02:17 ngày 01/10/2018

Kiểu như thế này:
sinhVien.xepLoai = sinhVien.loai::GIOI;

Bài liên quan
0