Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ฟังก์ชัน I/O ระดับสูง (High-Level I/O Functions) ในภาษา C

I/O (Input/Output) ในภาษา C แบ่งเป็น 2 ระดับ:

ประเภทเข้าใจง่ายโดยข้อดีข้อเสีย
High-level I/Oมนุษย์Portable (เคลื่อนย้ายระหว่างระบบได้)ช้ากว่า Low-level
Low-level I/Oคอมพิวเตอร์รวดเร็ว Execution time น้อยNon-portable (ขึ้นกับระบบปฏิบัติการ)

ตารางฟังก์ชัน High-Level I/O

ฟังก์ชันคำอธิบาย
fprintf()เขียนข้อมูลแบบจัดรูปแบบลงไฟล์
fscanf()อ่านข้อมูลแบบจัดรูปแบบจากไฟล์
putc() / fputc()เขียนอักขระเดี่ยวลงไฟล์
getc() / fgetc()อ่านอักขระเดี่ยวจากไฟล์
putw()เขียนจำนวนเต็มลงไฟล์
getw()อ่านจำนวนเต็มจากไฟล์
fputs()เขียนสตริงลงไฟล์
fgets()อ่านสตริงจากไฟล์
fread()อ่านเรคคอร์ดทั้งหมดจากไฟล์
fwrite()เขียนเรคคอร์ดทั้งหมดลงไฟล์

รายละเอียดฟังก์ชันสำคัญ

fprintf() & fscanf()

// เขียน
fprintf(fp, "control string", var_list);
// อ่าน
fscanf(fp, "control string", &var_list);

putc() & getc()

putc(ch, fp);        // เขียนอักขระ
ch = getc(fp);       // อ่านอักขระ

putw() & getw()

putw(num, fp);       // เขียนจำนวนเต็ม
num = getw(fp);      // อ่านจำนวนเต็ม

fputs() & fgets()

fputs(str, fp);                    // เขียนสตริง
fgets(str, max_chars, fp);         // อ่านสตริง (รวม newline)

fread() & fwrite() - สำหรับ Struct/Record

struct emp { int eno; char name[30]; float sal; } e;
FILE *fp;

fread(&e, sizeof(e), 1, fp);   // อ่าน 1 เรคคอร์ด
fwrite(&e, sizeof(e), 1, fp);  // เขียน 1 เรคคอร์ด

ตัวอย่างโปรแกรม: บันทึก/อ่านตัวเลข 1-10

#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("File content: ");
    for(i = 1; i <= 10; i++)
        printf("%d ", getw(fp));
    fclose(fp);
    return 0;
}

ตัวอย่างโปรแกรม: บันทึกข้อมูลนักศึกษา (Struct)

#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("Student %d:\n", i+1);
        printf("Number: "); scanf("%d", &s[i].sno);
        printf("Name: "); scanf("%s", s[i].sname);
        printf("Marks: "); 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("Student %d: %d %s %.2f\n", i+1, s[i].sno, s[i].sname, s[i].marks);
    }
    fclose(fp);
    return 0;
}