1. Mảng cấu trúc
Giả sử bạn cần quản lý danh sách khoảng 5000 sinh viên, khi đó thứ bạn cần đó là một mảng kiểu sinh viên có 5000 phần tử, mỗi phần tử trong mảng sẽ là một sinh viên
Sau khi có danh sách sinh viên được lưu trong mảng rồi thì bạn có thể sắp xếp, tìm kiếm, xóa, thay đổi thông tin ...
Ví dụ : Khai báo mảng sinh viên có 5000 phần tử
#include "stdio.h" #include "string.h" struct SinhVien{ char hoten[50]; char lop[50]; double gpa; }; typedef struct SinhVien SinhVien; int main(){ SinhVien a[5000]; return 0; }
2. Hàm nhập mảng cấu trúc
Để nhập thông tin cho 1 mảng cấu trúc, ví dụ danh sách N sinh viên thì bạn nên viết 1 hàm nhập thông tin cho 1 sinh viên và một hàm nhập danh sách sẽ gọi hàm nhập 1 sinh viên để nhập toàn bộ danh sách
Mình hướng dẫn 2 cách xây dựng hàm nhập thông tin cho 1 sinh viên, bạn có thể lựa chọn cách mình thấy dễ tiếp cận.
Code 1 : Hàm nhập sử dụng con trỏ
void nhap(SinhVien *x){ printf("Nhap ten : "); gets(x->hoten); printf("Nhap lop : "); gets(x->lop); printf("Nhap gpa : "); scanf("%lf", &x->gpa); } void nhapDS(SinhVien a[], int n){ for(int i = 0; i < n; i++){ printf("Nhap thong tin cho sinh vien thu %d : \n", i + 1); nhap(&a[i]); } }
Code 2 : Hàm nhập không sử dụng con trỏ nhưng trả về kiểu cấu trúc
SinhVien nhap(SinhVien x){ printf("Nhap ten : "); gets(x.hoten); printf("Nhap lop : "); gets(x.lop); printf("Nhap gpa : "); scanf("%lf", &x.gpa); return x; } void nhapDS(SinhVien a[], int n){ for(int i = 0; i < n; i++){ printf("Nhap thong tin cho sinh vien thu %d : \n", i + 1); a[i] = nhap(a[i]); //phai gan lai cho a[i] } }
3. Hàm xuất mảng cấu trúc
Tương tự như để xuất mảng cấu trúc bạn nên xây dựng hàm để in thông tin cho 1 biến struct rồi xây dựng thêm 1 hàm in ra toàn bộ mảng
Code :
void xuat(SinhVien x){ printf("------------------------\n"); printf("Ho ten : %s\n", x.hoten); printf("Lop : %s\n", x.lop); printf("Gpa : %.2lf\n", x.gpa); printf("------------------------\n"); } void xuatDS(SinhVien a[], int n){ for(int i = 0; i < n; i++){ printf("Thong tin sinh vien thu %d :\n", i + 1); xuat(a[i]); } }
Kết hợp code 2 phần nhập xuất bạn có thể nhập thông tin cho danh sách sinh viên từ bàn phím và in ra thông tin các sinh viên trong danh sách như sau
Chú ý xử lý trôi lệnh khi nhập tên cho mỗi sinh viên trong danh sách
Code :
#include "stdio.h" #include "string.h" struct SinhVien{ char hoten[50]; char lop[50]; double gpa; }; typedef struct SinhVien SinhVien; SinhVien nhap(SinhVien x){ printf("Nhap ten : "); gets(x.hoten); printf("Nhap lop : "); gets(x.lop); printf("Nhap gpa : "); scanf("%lf", &x.gpa); getchar(); // xoa enter sau khi nhap scanf return x; } void nhapDS(SinhVien a[], int n){ for(int i = 0; i < n; i++){ printf("Nhap thong tin cho sinh vien thu %d : \n", i + 1); a[i] = nhap(a[i]); //phai gan lai cho a[i] } } void xuat(SinhVien x){ printf("------------------------\n"); printf("Ho ten : %s\n", x.hoten); printf("Lop : %s\n", x.lop); printf("Gpa : %.2lf\n", x.gpa); printf("------------------------\n"); } void xuatDS(SinhVien a[], int n){ for(int i = 0; i < n; i++){ printf("Thong tin sinh vien thu %d :\n", i + 1); xuat(a[i]); } } int main(){ SinhVien a[5000]; int n; // so luong sinh vien printf("Nhap so luong sinh vien : "); scanf("%d", &n); getchar(); nhapDS(a, n); xuatDS(a, n); return 0; }
Video Struct :