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

Các hàm I/O cấp cao (High-level I/O) trong C


I/O = Input/Output (Nhập/Xuất).

Phân loại

  • High-level I/O: Dễ hiểu, có tính di động (portable).
  • Low-level I/O: Gần phần cứng, thực thi nhanh nhưng không di động.

Danh sách hàm High-level I/O

HàmMô tả
fprintf()Ghi dữ liệu có định dạng vào file
fscanf()Đọc dữ liệu có định dạng từ file
putc() / fputc()Ghi một ký tự vào file
getc() / fgetc()Đọc một ký tự từ file
putw()Ghi một số nguyên vào file
getw()Đọc một số nguyên từ file
fputs()Ghi một chuỗi vào file
fgets()Đọc một chuỗi từ file
fread()Đọc toàn bộ bản ghi (record) từ file
fwrite()Ghi toàn bộ bản ghi vào file

Chi tiết các nhóm hàm

fprintf() & fscanf()

fprintf(fp, "dinhdang", ds_bien);
fscanf(fp, "dinhdang", &ds_bien);

putc() & getc()

putc(ky_tu, fp);
ky_tu = getc(fp);

putw() & getw()

putw(so_nguyen, fp);
so_nguyen = getw(fp);

fputc() & fgetc()

Tương tự putc/getc nhưng là hàm chuẩn (không phải macro).

fgets() & fputs()

fgets(chuoi, so_ky_tu, fp);
fputs(chuoi, fp);

fread() & fwrite()

Dùng cho cấu trúc (struct) – đọc/ghi toàn bộ bản ghi.

fread(&struct_var, sizeof(struct_var), so_luong, fp);
fwrite(&struct_var, sizeof(struct_var), so_luong, fp);

Chương trình 1: Ghi/đọc số 1..10 dùng putw/getw

#include <stdio.h>
int main() {
    FILE *fp;
    int i;
    fp = fopen("num.txt", "w");
    for (i = 1; i <= 10; i++)
        putw(i, fp);
    fclose(fp);

    fp = fopen("num.txt", "r");
    printf("Noi dung file: ");
    for (i = 1; i <= 10; i++) {
        int val = getw(fp);
        printf("%d ", val);
    }
    fclose(fp);
    return 0;
}

Kết quả

Noi dung file: 1 2 3 4 5 6 7 8 9 10

Chương trình 2: Ghi/đọc struct sinh viên dùng fwrite/fread

#include <stdio.h>
struct student {
    int sno;
    char sname[30];
    float marks;
};
int main() {
    struct student s[2];
    FILE *fp;
    int i;
    fp = fopen("student.txt", "w");
    for (i = 0; i < 2; i++) {
        printf("Nhap thong tin sinh vien %d:\n", i+1);
        printf("Ma so: "); scanf("%d", &s[i].sno);
        printf("Ten: "); scanf(" %[^\n]", s[i].sname);
        printf("Diem: "); scanf("%f", &s[i].marks);
        fwrite(&s[i], sizeof(s[i]), 1, fp);
    }
    fclose(fp);

    fp = fopen("student.txt", "r");
    for (i = 0; i < 2; i++) {
        fread(&s[i], sizeof(s[i]), 1, fp);
        printf("\nSinh vien %d: %d - %s - %.2f", i+1, s[i].sno, s[i].sname, s[i].marks);
    }
    fclose(fp);
    return 0;
}