Bài tập c++ (15 char)

Đây là bài tập được cô nhập môn lập trình cho em về nhà làm. Mà ai học thực hành bà cô này thì được chỉ em thì học thực hành khác lớp nên không biết gì luôn tụi học bã này được chỉ làm câu 1 như thế này. Em xin code sữa lại được như thế này mà có nhiều chỗ không hiểu với bị lỗi. Mây anh chị chỉ em với. Em bị sai ở 3 chỗ em làm dấu <> đáy ạ.
Năm nhất cntt xin dk cảm ơn trước ạ.

#include<iostream>
using namespace std;
#define max 50
struct date{
	int ngay;
	int thang;
	int nam;
};
struct thongtin{
	char malophoc[5];
	char chude[30];
	char hotengiaovien[30];
	int siso;
	date ngaybatdau;
	date ngayketthuc;
	int count;
};
struct lophoc{
	
	thongtin listlophoc[max];
};
void nhapngay(date &d){
	cout << "\nNhap ngay";
	cin >> d.ngay;//tại sao mình lại cần phải d.ngay có thể thay thế d bằng cái khác không
	cout << "\nNhap thang";
	cin >> d.thang;
	cout << "\nNhap nam";
	cin >> d.nam;
}
void xuatngay(date d)
{
	cout << d.ngay << "/" << d.thang<<"/" << "/" << d.nam;
}
void nhaplophoc(thongtin &a)
{
	cout << "\nNhap ma lop hoc:";
	fflush(stdin);//nghĩa của đoạn code này là gì thế ạ.
	cin.getline(a.malophoc, 11);/*nghĩa của đoạn code này là sao ạ. Còn số 11 tại sao lại là số 11 và nó                               có ý nghĩa gì*/
	cout << "\nNhap che du:";
	fflush(stdin);
	cin.getline(a.chude,51 );
	cout << "\nNhap ho va ten GVL";
	fflush(stdin);
	cin.getline(a.hotengiaovien, 11);
	cout << "\nNhap si so:";
	fflush(stdin);
	cin<.>getline(a.siso, 11);//SAI
	cout << "\nNhap ngay bat dau hoc:";
	nhapngay(a.ngaybatdau);
	cout << "\nNhap ngay ket thuc hoc:";
	nhapngay(a.ngayketthuc);
	}
void xuatlophoc(thongtin a){
	cout << "\n" << a.malophoc << "\n"
		<< a.chude << "\n" << a.hotengiaovien
		<< "\n" << a.siso;
	xuatngay(a.ngaybatdau);
	xuatngay(a.ngayketthuc);
}
void nhapdanhsachlophoc(thongtin &list){
	int count;
	cout << "\nNhap so luong lop hoc";
	cin >> list.count;//tại sao mình lại cần phải cần count ở đây dậy a.
	for (int i = 0; i <= list.count; i++)
	{
		nhaplophoc(list.count[<i>]);//sai
	}
}
void xuatdanhsachlophoc(thongtin &list){
	cout << "\nXuat danh sach lop hoc";
	cin >> list.count;
	for (int i = 0; i <= list.count; i++)
	{
		xuatlophoc(list.count[<i>])//SAI;
	}

}
void main(){
	thongtin a;
	nhapdanhsachlophoc(a);
	xuatdanhsachlophoc(a);
	system("pause");
}

Phần giải thích

d.ngay => cái này do em tự qui định trong struct của em mà

fflush(stdin) => xóa vùng nhớ đệm

cin.getline()

istream& cin.getline(char *str, int n, char delim = ‘\n’)
Đọc dãy ký tự tính cả khoảng trắng vào bộ nhớ do str trỏ tới, quá trình đọc kết thúc khi gặp ký tự kết thúc chuỗi ‘\0’ hoặc nhận đủ n-1 ký tự, ký tự Enter được loại bỏ không đưa vào dãy ký tự nhận được

cin >> list.count; để lưu số lượng phần tử của list chứ chi, int count nằm trong struct thongtin do em tự tạo ra đó :expressionless: Mà làm vậy sai đề, và cái int count em khai báo trong hàm đó là vô nghĩa

Phần sai
cin.getline(a.siso, 11);//SAI => a.siso là kiểu int

nhaplophoc(list.count[i]);//sai
xuatlophoc(list.count[i])//SAI; => list.count là kiểu int trong khi đó hai hàm nhập xuất truyền vào kiểu thongtin :mask:

Thêm một cái sai nữa là khi nhập danh sách lớp học (lẽ ra là thêm mới lớp học đó) em nhập nó vào một biến kiểu thongtin => đúng ra phải nhập vào một mảng (hoặc tương đương mảng) thongtin (tức là kiểu lophoc đó). Ví dụ:

void themLopHoc(lophoc &DanhSachLopHoc){
        int count;
	cout << "\nNhap so luong lop hoc muon them";
        cin >> count;
	for (int i = DanhSachLopHoc.count; i <= DanhSachLopHoc.count + count; i++)
	{
		nhaplophoc(DanhSachLopHoc.listlophoc[i]);
	}
	DanhSachLopHoc.count += count;
}

À struct lophoc sửa thành như dưới (còn cái int count của thongtin thì bỏ đi)

struct lophoc{
	int count = 0;
	thongtin listlophoc[max];
};

Nhận xét cuối
Em bị hỏng kiến thức nhiều quá, học lâu chưa? Bài này còn thiếu xót nhiều lắm, không chỉ bấy nhiêu sai đâu. Chuyện bà cô TH có dạy e hay không cũng có quan trọng lắm đâu, nên học lại nhiều kiến thức nha. Cố lên :sunny:

Buồn ngủ quá, lỡ có sửa cái nào sai cao nhân nào nhắc dùm nha hihi

Mà code này là do thằng bạn em viết hết hả? Bài này khá là cơ bản và thuộc dạng dễ, cố gắng luyện lại kiến thức nhé. Có thể xem sơ-ri của anh Đạt về C và C++

cái này là nhiều bài tập giống nhau chỉ dổi phần ngoài còn code thì giống nhau. Em lấy về đổi cho giống với bài tập của em.

Em chỉ chưa học tới struct mà anh. Cái này em chỉ mới tìm hiểu trên mạng thôi còn video của anh Đạt không có struct chỉ có lass thôi. Anh cho em xin địa chỉ liên lạc để em có thể hỏi thêm được không anh.

cin.getline(a.hotengiaovien, 11);//dậy a.hotengiaovien là a lấy kiểu dữ liệu hotengiao viên còn số 11 ngoài sau có nghĩa là gì dậy anh

Có giải thích rồi mà, 11 là giới hạn lượng kí tự đọc vào, nó nhận được 10 kí tự thôi, nhập nhiều hơn thì cũng nhận 10 thôi :smiley:

Còn vụ địa chỉ liên lạc thì … địa chỉ này nè hehe. Mà a cũng ít lên đây lắm, em có thể mở topic hỏi mà, nhiều a/c sẽ vô trả lời :wink: class thì cũng giống struct thôi, dĩ nhiên có khác chỗ class mặc định là private nên muốn giống struct thì thêm public: mà sau này cũng chỉ dùng class thôi. PR tí: em có thể mua sách Nhập môn lập trình, Kĩ thuật lập trình, Phương pháp lập trình hướng đối tượng ở ĐH KHTN để đọc. Còn sau này giỏi TA rồi thì tài liệu hay sẽ vô số.

Anh đang trong thời kì chán code hoho

em sợ đăng nhiều quá máy a/c không thèm trả lời em thôi với em cũng ngại nữa.

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