feof(fp)的意义及使用方法用法介绍(理解feof与EOF)

一、feof(fp)是什么

feof(fp)是一个用于检查文件流(file stream)fp是否已到达文件末尾的函数。它的返回值是一个整数,如果到达末尾返回非零值,否则返回零。该函数常用于循环读取文件的操作中,我们可以检查文件流是否已经读到了文件结尾,从而决定是否终止循环。

二、如何正确使用feof(fp)

在使用 feof(fp) 时需要注意以下几点:

1、必须在文件读取之后使用 feof(fp),否则会一直返回 0。

// 错误示范
FILE* fp = fopen("file.txt", "r");
if (feof(fp)) {
    // ...
}
// 错误示范:fp 尚未读取任何数据,feof(fp) 会一直返回 0
while (feof(fp)) {
    // ...
}

// 正确示范
FILE* fp = fopen("file.txt", "r");
char line[100];
while (fgets(line, sizeof(line), fp)) {
    // 在这里使用 feof(fp) 进行判断
    if (feof(fp)) {
        printf("已到达文件结尾n");
        break;
    }
    printf("%s", line);
}

2、feof(fp)只判断读取指针是否到达文件尾部,不判断文件是否发生错误。

// 文件读写发生错误时,feof(fp) 仍然可能返回 0
FILE* fp = fopen("file.txt", "r");
if (feof(fp)) {
    printf("已到达文件结尾n");
} else {
    printf("文件读取发生错误n");
}

3、循环读取文件时,feof(fp) 应该放在循环的结尾判断。

FILE* fp = fopen("file.txt", "r");
char line[100];
while (fgets(line, sizeof(line), fp)) {
    printf("%s", line);
}
if (feof(fp)) {
    printf("已到达文件结尾n");
}

三、feof(fp)的使用示例

以下是一个使用 feof(fp) 的示例,该程序从文件中读取数字并返回它们的和。

#include <stdio.h>

int main() {
    FILE* fp = fopen("num.txt", "r");
    if (fp == NULL) {
        printf("打开文件失败n");
        return 1;
    }
    int sum = 0;
    int num;
    while (fscanf(fp, "%d", &num) == 1) {
        printf("%d ", num);
        sum += num;
    }
    if (feof(fp)) {
        printf("n已到达文件结尾n");
    } else {
        printf("n文件读取发生错误n");
    }
    printf("和为:%dn", sum);
    fclose(fp);
    return 0;
}

运行上述程序并输入以下内容到 num.txt 文件中:

1 2 5 8 9 7

运行结果如下:

1 2 5 8 9 7 
已到达文件结尾
和为:32

四、小结

feof(fp) 是一个用于检查文件流是否到达文件末尾的函数,它的使用需要注意正确的使用时机、错误处理以及与其他文件读取函数的结合使用。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平