5.3.5|
Cũng giống các biến mảng, để làm việc với một biến cấu trúc ta phải thực hiện thao tác trên từng thành phần của chúng. Ví dụ nhập/xuất một biến cấu trúc phải viết câu lệnh nhập/xuất từng cho từng thành phần như sau:
struct NgayThang { int nNgay; int nThang; int nNam; }; struct SinhVien { char szHoTen[25]; NgayThang xNgaySinh; int nGT; float fDiem; } xSV1, xSV2;
cout << " Nhập dữ liệu cho sinh viên xSV1:" << endl; cin.getline(xSV1.szHoTen, 25);
cin >> xSV1.xNgaySinh.nNgay >> xSV1.xNgaySinh.nThang >> xSV1.xNgaySinh.nNam;
cin >> xSV1.nGT; cin >> xSV1.fDiem;
cout << "Thông tin về sinh viên xSV1 là:" << endl; cout << "Họ và tên: " << xSV1.szHoTen << endl;
cout << "Sinh ngày: " << xSV1.xNgaySinh.nNgay << "/" << xSV1.xNgaySinh.nThang << "/" << xSV1.xNgaySinh.nNam;
cout << "Giới tính: " << (xSV1.gt == 1) ? "Nam": "Nữ"; cout << xSV1.diem;
Tuy nhiên, khác với biến mảng, đối với cấu trúc chúng ta có thể gán giá trị của hai biến cho nhau. Phép g|n n{y cũng tương đương với việc gán từng thành phần của cấu trúc. Ví dụ: struct SinhVien { char szHoTen[25]; NgayThang xNgaySinh; int nGt; float fDiem; } xSV1, xSV2, *p;
Tài liệu giảng dạy Trang 44
cin.getline(xSV1.hoten, 25);
cin >> xSV1.xNgaySinh.nNgay >> xSV1.xNgaySinh.nThang >> xSV1.xNgaySinh.nNam;
cin >> xSV1.nGT; cin >> xSV1.fDiem;
xSV2= xSV1;// Đối với biến mảng, phép gán này không thực hiện được p = new SinhVien[1]; *p = xSV1;
cout << "Thông tin về sinh viên xSV2 là:" << endl; cout << "Họ và tên: " << xSV2.hoten << endl;
cout << "Sinh ngày: " << xSV2.xNgaySinh.nNgay << "/" << xSV2.xNgaySinh.nThang << "/" << xSV2.xNgaySinh.nNam;
cout << "Giới tính: " << (xSV2.nGT = 1) ? "Nam": "Nữ"; cout << xSV2.fDiem;
Chú ý: Không gán bộ giá trị cụ thể cho biến cấu trúc. Cách gán này chỉ thực hiện được khi khởi tạo.
Ví dụ:
SinhVien xSV1 = { "NVA", {1,1,1980}, 1, 7.0}, xSV2; // được xSV2 = { "NVA", {1,1,1980}, 1, 7.0}; // không được
xSV2 = xSV1; // được