1. Bài tâp đọc và ghi ma trận vào file trong ngôn ngữ lập trình C
Bài tập này chúng ta sẽ sử dụng các kiến thức từ ngôn ngữ lập trình C như: cách nhập xuất văn bản trong ngôn ngữ lập trình C, cách dùng vòng lặp for trong C để duyệt qua từng sinh viên trong danh sách, cách sử dụng hàm trong C, các dùng struct, cách đọc và ghi file trong C.
Yêu cầu của bài tập đưa ra cho chúng ta là nhập thông tin của sinh viên từ bàn phím ghi vào file và lấy dữ liệu từ file in ra màn hình.
2. Lời giải
Để thực hiện bài toán này chúng ta cần có kiến thức cơ bản về ngôn ngữ lập trình C, các cách nhập xuất chuỗi cơ bản trong C, cách dùng vòng lặp for trong C để duyệt qua từng sinh viên trong danh sách, cách sử dụng hàm trong C, các dùng struct, cách đọc và ghi file trong C.
Để đọc và ghi file trong C chúng ta cần phải sử dụng các hàm nằm trong thư viện stdlid.h. Bạn có thể tìm hiểu về đọc ghi file nhiều hơn từ chương trình học của chúng tôi Tại Đây
Các bước thực hiện yêu cầu của bài tập nhập thông tin của sinh viên từ bàn phím ghi vào file và lấy dữ liệu từ file in ra màn hình bằng ngôn ngữ lập trình C như sau:
Bước 1: Khai báo cấu trúc struct SinhVien gồm có các thuộc tính: char MaSV[50](mã sinh viên), char TenSV[50](tên sinh viên), char Lop[50](lớp), float DTK(điểm tổng kết).
Bước 2: Khởi tạo hàm void ghifile() dùng để nhập thông tin sinh viên từ bàn phím rồi ghi vào file.
- 1.1 Ta khai bao con trỏ kiểu file FILE *fp.
- 1.2 Khai báo mảng kiểu SinhVien sv[100] và số sinh viên int n.
- 1.3 Mở file ở chế độ w (chỉ ghi) fp = fopen(“laptrinhtudau.txt”,”w”).
- 1.4 Kiểm tra file dùng if với điều kiện nếu fp==NULL thì báo lỗi vào kết thúc.
- 1.5 Nhập vào sinh viên trong danh sách và dùng hàm fprintf() để ghi vào file.
- 1.6 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<n, mỗi lần lặp i tăng lên 1 dùng để kiểm soát từng sinh viên. Trong vòng lặp ta nhập dữ liệu cho từng sinh viên sv[i].
- 1.7 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<n, mỗi lần lặp i tăng lên 1 dùng để kiểm soát từng sinh viên. Trong vòng lặp ta nhập dữ liệu cho từng sinh viên sv[i]. Trong vòng lặp ta ghi dữ liệu của từng sinh viên sv[i] vào file.
- 1.8 Dóng file.
Bước 2: Khởi tạo hàm void docfile() dùng để đọc dữ liệu từ file và hiển thị dữ liệu ra màn hình.
- 2.1 Ta khai bao con trỏ kiểu file FILE *fp.
- 2.2 Khai báo mảng kiểu SinhVien sv[100] và số sinh viên int n.
- 2.3 Mở file ở chế độ r (chỉ đọc) fp = fopen(“laptrinhtudau.txt”,”r”).
- 2.4 Kiểm tra file dùng if với điều kiện nếu fp==NULL thì báo lỗi vào kết thúc.
- 2.5 Đọc dữ liệu từ file gán vào n bằng hàm fscanf.
- 2.6 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<n, mỗi lần lặp i tăng lên 1 dùng để kiểm soát từng sinh viên. Trong vòng lặp ta nhập dữ liệu cho từng sinh viên sv[i]. Trong vòng lặp ta đọc dữ liệu từ file gán vào từng sinh viên sv[i].
- 2.7 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<n, mỗi lần lặp i tăng lên 1 dùng để kiểm soát từng sinh viên. Trong vòng lặp ta nhập dữ liệu cho từng sinh viên sv[i]. Trong vòng lặp in dữ liệu của từng sinh viên sv[i] ra màn hình.
- 2.8 Dóng file.
Bước 3: Trong hàm main ta gọi hai hàm docfile() và ghifile() rồi chạy chương trình.
Chương trình giải bài tập nhập thông tin của sinh viên từ bàn phím ghi vào file và lấy dữ liệu từ file in ra màn hình bằng ngôn ngữ lập trình C như sau:
#include <stdio.h> #include <stdlib.h> struct SinhVien{ char MaSV[50]; char TenSV[50]; char Lop[50]; float DTK; }; void ghifile(){ FILE *fp;//khai báo con tro co kieu file SinhVien sv[100];//mang sv kieu sinh vien int n;// so sinh vien //mo file o che do w fp = fopen("laptrinhtudau.txt","w"); //kiem tra file if(fp==NULL){ printf("Loi file!"); return; } //nhap vao so hang cua ma tran printf("Nhap so sinh vien:"); scanf("%d",&n); //ghi so sinh vien vao file fprintf(fp,"%d",n); fprintf(fp,"\n"); //nhap thong tin cua tung sinh vien for(int i=0; i<n; i++){ printf("\nNhap thong tin sinh vien thu %d:",i); printf("\nNhap ma sinh vien:"); fflush(stdin);//xoa bo dem gets(sv[i].MaSV); printf("\nNhap ten sinh vien:"); fflush(stdin);//xoa bo dem gets(sv[i].TenSV); printf("\nNhap lop:"); fflush(stdin);//xoa bo dem gets(sv[i].Lop); printf("\nNhap diem tong ket:"); scanf("%f", &sv[i].DTK); } //ghi thong tin cua tung sinh vien vao file for(int i=0; i<n; i++){ fprintf(fp,"%s \t %s \t %s \t %f \n",sv[i].MaSV, sv[i].TenSV,sv[i].Lop,sv[i].DTK); } //dong file fclose(fp); } void docfile(){ FILE *fp;//khai báo con tro co kieu file SinhVien sv[100];//maang sv kieu SinhVien int n;// so sinh vien //mo file o che do r fp = fopen("laptrinhtudau.txt","r"); //kiem tra file if(fp==NULL){ printf("Loi file!"); return; } //doc du lieu tu file gan vao n fscanf(fp,"%d",&n); printf("So sinh vien la: %d\n",n); //doc du lieu tu file gan vao tung sinh vien thi i for(int i=0; i<n; i++){ fscanf(fp,"%s%s%s%f",&sv[i].MaSV, &sv[i].TenSV,&sv[i].Lop,&sv[i].DTK); } //in ma tran ra man hinh printf("-----Danh sach sinh vien-----\n"); printf("MaSV \t TenSv \t\t Lop \t DTK \n"); for(int i=0; i<n; i++){ printf("%s \t %s \t %s \t %f \n",sv[i].MaSV, sv[i].TenSV,sv[i].Lop,sv[i].DTK); } //dong file fclose(fp); } int main(){ ghifile(); docfile(); }
Kết quả:
Nhap so sinh vien:2 Nhap thong tin sinh vien thu 0: Nhap ma sinh vien:01 Nhap ten sinh vien:NguyenVanA Nhap lop:CNTT1 Nhap diem tong ket:9 Nhap thong tin sinh vien thu 1: Nhap ma sinh vien:02 Nhap ten sinh vien:ChuVanB Nhap lop:CNPM2 Nhap diem tong ket:8 So sinh vien la: 2 -----Danh sach sinh vien----- MaSV TenSv Lop DTK 01 NguyenVanA CNTT1 9.000000 02 ChuVanB CNPM2 8.000000
3. Tổng kết
Sau khi làm bài tập này các bạn cần phải hiểu và nắm được những kiến thức sau:
- Cách nhập xuất cơ bản trong ngôn ngữ lập trình C.
- cách dùng vòng lặp for trong C để duyệt qua các sinh viên trong danh sách.
- Cách đọc và ghi file trong C.
- Đọc và ghi thông tin sinh viên trong C.