Đề bài
Viết chương trình C lưu thông tin 5 sinh viên vào file và đọc in ra dùng fread()/fwrite().
Giải pháp
Hàm fread()
Đọc toàn bộ bản ghi (record) một lần.
Cú pháp: fread(&struct_var, sizeof(struct_var), num_records, file_ptr);
Ví dụ:
struct emp {
int eno;
char ename[30];
float sal;
} e;
FILE *fp;
fread(&e, sizeof(e), 1, fp);
Hàm fwrite()
Ghi toàn bộ bản ghi một lần.
Cú pháp: fwrite(&struct_var, sizeof(struct_var), num_records, file_ptr);
Ví dụ:
struct emp {
int eno;
char ename[30];
float sal;
} e;
FILE *fp;
fwrite(&e, sizeof(e), 1, fp);
Chương trình hoàn chỉnh
#include <stdio.h>
struct student {
int sno;
char sname[30];
float marks;
char temp; // Đọc ký tự newline
};
int main() {
struct student s[60];
int i;
FILE *fp;
// Ghi file
fp = fopen("student1.txt", "w");
for (i = 0; i < 2; i++) {
printf("Nhập thông tin sinh viên %d\n", i+1);
printf("Mã số: ");
scanf("%d", &s[i].sno);
scanf("%c", &s[i].temp); // Đọc \n
printf("Tên: ");
gets(s[i].sname);
printf("Điểm: ");
scanf("%f", &s[i].marks);
fwrite(&s[i], sizeof(s[i]), 1, fp);
}
fclose(fp);
// Đọc file
fp = fopen("student1.txt", "r");
for (i = 0; i < 2; i++) {
printf("\nThông tin sinh viên %d:\n", i+1);
fread(&s[i], sizeof(s[i]), 1, fp);
printf("Mã số: %d\n", s[i].sno);
printf("Tên: %s\n", s[i].sname);
printf("Điểm: %f\n", s[i].marks);
}
fclose(fp);
return 0;
}
Kết quả chạy
Nhập thông tin sinh viên 1
Mã số: 1
Tên: pinky
Điểm: 56
Nhập thông tin sinh viên 2
Mã số: 2
Tên: rosy
Điểm: 87
Thông tin sinh viên 1:
Mã số: 1
Tên: pinky
Điểm: 56.000000
Thông tin sinh viên 2:
Mã số: 2
Tên: rosy
Điểm: 87.000000