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

เทคนิคการจัดการข้อผิดพลาด (Error Handling) ในภาษา C

ข้อผิดพลาดที่พบบ่อยในการจัดการไฟล์:

  • อ่านเกินขอบเขตไฟล์ (Read beyond EOF)
  • อุปกรณ์เต็ม (Device overflow)
  • พยายามเปิดไฟล์ที่ไม่ถูกต้อง
  • เปิดไฟล์โหมดผิด (เช่นเปิดอ่านแต่เขียน)

ฟังก์ชันจัดการข้อผิดพลาด

ferror() - ตรวจสอบข้อผิดพลาด I/O

int ferror(FILE *fp);

คืนค่า 0 = ไม่มีข้อผิดพลาด, ค่าอื่น = มีข้อผิดพลาด

FILE *fp;
if(ferror(fp))
    printf("Error occurred");

perror() - แสดงข้อความข้อผิดพลาด

void perror(const char *str);

แสดงข้อความ str ตามด้วย ":" และรายละเอียดข้อผิดพลาดของระบบ

FILE *fp;
char str[30] = "Error is";
perror(str);
// Output: Error is: No such file or directory

feof() - ตรวจสอบ End of File

int feof(FILE *fp);

คืนค่าค่าจริง (non-zero) ถ้าอ่านถึง EOF แล้ว

FILE *fp;
if(feof(fp))
    printf("Reached end of file");

ตัวอย่างโปรแกรม: ใช้ ferror() และ perror()

#include <stdio.h>

int main() {
    FILE *fp;
    char str[30] = "error is";
    int i = 20;
    
    fp = fopen("sample.txt", "r"); // เปิดอ่านอย่างเดียว
    if(fp == NULL) {
        printf("File does not exist\n");
    } else {
        // พยายามเขียนในไฟล์ที่เปิดอ่านอย่างเดียว -> จะเกิด error
        fprintf(fp, "%d", i);
        if(ferror(fp)) {
            perror(str);
            printf("Error detected\n");
        }
        fclose(fp);
    }
    return 0;
}

ตัวอย่างโปรแกรม: ใช้ feof()

#include <stdio.h>

int main() {
    FILE *fp;
    int i, n;
    
    // เขียนตัวเลข 0-100 ลงไฟล์
    fp = fopen("number.txt", "w");
    for(i = 0; i <= 100; i += 10)
        putw(i, fp);
    fclose(fp);
    
    // อ่านกลับมา
    fp = fopen("number.txt", "r");
    printf("File content: ");
    for(i = 0; i <= 100; i++) {
        n = getw(fp);
        if(feof(fp)) {
            printf("\nReached end of file");
            break;
        }
        printf("%d ", n);
    }
    fclose(fp);
    return 0;
}

ผลลัพธ์

File content: 0 10 20 30 40 50 60 70 80 90 100
Reached end of file