📖 Tài liệu
1. Mục tiêu bài học
Sau bài này, người học sẽ:
- hiểu
structlà gì - biết cách khai báo
struct - nhập dữ liệu từ bàn phím
- xuất dữ liệu ra màn hình
2. Khai báo struct
struct SinhVien {
char ten[50];
int tuoi;
float diem;
};
Giải thích
| Thành phần | Ý nghĩa |
|---|---|
struct SinhVien | tạo kiểu dữ liệu mới tên SinhVien |
char ten[50] | chuỗi lưu tên sinh viên |
int tuoi | lưu tuổi |
float diem | lưu điểm |
struct cho phép gom nhiều biến liên quan vào cùng một đối tượng.
3. Chương trình hoàn chỉnh
#include <stdio.h>
#include <string.h>
struct SinhVien {
char ten[50];
int tuoi;
float diem;
};
int main() {
struct SinhVien sv;
char buffer[100];
printf("Nhap ten sinh vien: ");
fgets(sv.ten, sizeof(sv.ten), stdin);
sv.ten[strcspn(sv.ten, "\n")] = '\0';
printf("Nhap tuoi: ");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d", &sv.tuoi);
printf("Nhap diem: ");
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%f", &sv.diem);
printf("\nThong tin sinh vien\n");
printf("Ten: %s\n", sv.ten);
printf("Tuoi: %d\n", sv.tuoi);
printf("Diem: %.2f\n", sv.diem);
return 0;
}
4. Giải thích từng phần của chương trình
4.1 Thư viện sử dụng
#include <stdio.h>
#include <string.h>
stdio.h→ dùngprintf,fgetsstring.h→ dùngstrcspn
4.2 Khai báo cấu trúc sinh viên
struct SinhVien {
char ten[50];
int tuoi;
float diem;
};
Cấu trúc này giống như một mẫu (template) để tạo ra các đối tượng sinh viên.
4.3 Tạo biến struct
struct SinhVien sv;
Biến sv sẽ chứa:
sv.ten
sv.tuoi
sv.diem
4.4 Buffer dùng để nhập số
char buffer[100];
Dùng để:
- đọc dữ liệu từ bàn phím bằng
fgets - sau đó chuyển sang số bằng
sscanf
Cách này tránh lỗi nhập liệu trong C.
4.5 Nhập tên sinh viên
fgets(sv.ten, sizeof(sv.ten), stdin);
fgets đọc cả khoảng trắng nên phù hợp để nhập tên.
Ví dụ người dùng nhập:
Nguyen Van A
Loại bỏ ký tự xuống dòng
sv.ten[strcspn(sv.ten, "\n")] = '\0';
fgets thường lưu thêm ký tự \n.
Ví dụ:
"Nguyen Van A\n"
Dòng code trên sẽ đổi \n thành \0 để chuỗi trở thành:
"Nguyen Van A"
4.6 Nhập tuổi
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d", &sv.tuoi);
Quy trình:
stdin → fgets → buffer → sscanf → sv.tuoi
Ví dụ:
Input: 20
Sau sscanf:
sv.tuoi = 20
4.7 Nhập điểm
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%f", &sv.diem);
Ví dụ:
Input: 8.5
Sau đó:
sv.diem = 8.5
4.8 Xuất thông tin sinh viên
printf("Ten: %s\n", sv.ten);
printf("Tuoi: %d\n", sv.tuoi);
printf("Diem: %.2f\n", sv.diem);
Kết quả hiển thị:
Ten: Nguyen Van A
Tuoi: 20
Diem: 8.50
5. Ví dụ chạy chương trình
Input
Nhap ten sinh vien: Nguyen Van A
Nhap tuoi: 20
Nhap diem: 8.5
Output
Thong tin sinh vien
Ten: Nguyen Van A
Tuoi: 20
Diem: 8.50
6. Tổng kết
Sau bài này, bạn đã biết:
| Kiến thức | Ý nghĩa |
|---|---|
struct | tạo kiểu dữ liệu mới |
. | truy cập thành viên |
fgets | nhập chuỗi |
sscanf | chuyển chuỗi sang số |
printf | xuất dữ liệu |