C 语言 文件结束(EOF)

C 语言中,EOF(End of File)是一个常量,表示文件流的结束。当使用如 fgetc()、fgets() 或 scanf() 等函数读取文件时,文件结束时会返回 EOF,从而标志着文件读取已结束。EOF 用于表示文件读取的结束,通常返回 -1。通过检查 fgetc()、fgets() 等函数的返回值是否为 EOF,可以判断文件是否已到达末尾。为了区分文件结束和读取错误,推荐使用 feof() 和 ferror() 函数。

1、EOF 的定义

EOF 是一个常量,通常在 头文件中定义。它的值通常是 -1,表示文件流的结束。

#define EOF (-1)

C 中,EOF 通常定义为 -1,但它的实际值可以在不同平台上有所不同。-1 用于表示读取到文件末尾或遇到错误。

2、使用 EOF 的场景

1)读取字符

当读取文件中的字符时,fgetc() 函数会返回一个字符的整数值。如果它到达文件的末尾,就返回 EOF

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    int ch;
    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);  // 打印每个字符
    }

    fclose(file);
    return 0;
}

2)读取字符串

当使用 fgets() 读取字符串时,EOF 同样用于指示文件结束。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file)) {
        printf("%s", buffer);  // 打印每行内容
    }

    fclose(file);
    return 0;
}

3、检查 EOF 的使用

在使用文件读取函数时,EOF 不仅表示文件结束,还可能表示读取错误。因此,检测文件结束时最好通过 feof() 函数来判断是否是文件结束,或者是发生了其他错误。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    int ch;
    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);  // 打印每个字符
    }

    if (feof(file)) {
        printf("\nEnd of file reached.\n");
    } else {
        printf("\nError occurred.\n");
    }

    fclose(file);
    return 0;
}

推荐阅读
cjavapy编程之路首页