Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Giải thích hàm fread() và fwrite() file trong C


Đề 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