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àm | Mô 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;
}