C 语言中的文件结尾(EOF)
 
在 C 语言中表达 EOF 的话题将是本文的重点。
C 语言中的 End of File(EOF)
    
当不再有任何数据可以从数据源读取时,称为 End of File 的情况发生在计算机的操作系统中。数据源通常被称为文件或流。
当显示 End of the File (EOF) 消息时,输入已完成。
输入内容后,我们可以同时按下 Ctrl 和 Z 键来终止文本。这表明文件已经结束,没有什么要读的了。
在 C 语言中到达文件末尾时,getc() 函数返回 EOF。如果不成功,getc() 也将返回 end-of-file (EOF)。
因此,仅将 getc() 提供的值与 EOF 进行比较以确定文件是否已到达其末尾是不够的。C 提供了 feof() 函数来解决这个问题。
仅当到达文件末尾时,此函数才会返回大于零的值;否则,它将返回 0。
C 语言中对文件的操作
大多数程序都是为了保存从程序中检索到的信息而开发的。其中一种方法是将获得的信息保存在文件中。
以下是可以对文件执行的各种操作的列表。
创建文件
使用 fopen 程序并指定诸如 a、a+、w 和 w++ 之类的特征,可以创建一个新文件。
打开文件
每当打开文件时,都会使用 fopen 功能和适当的访问模式。以下是一些最常用的文件访问模式。
- 
按 a将搜索文件。如果文件被成功打开,fopen()函数将其加载到内存中并创建一个指针,该指针链接到正在从中读取的字符。如果该文件尚不存在,则会生成一个新文件。如果无法打开文件,则返回 Null。
- 
字母 w搜索文件。如果文件已经存在,文件的内容将被重写。如果该文件尚不存在,则会生成一个新文件。如果文件无法打开,将返回 Null。
为了执行需要在文件上完成的活动,使用称为 文件指针 的专用指针,其声明如下所示:
FILE *fp;
因此,可以使用以下命令打开文件:
fp = fopen("Shanii.txt", "w");
这里,Shanii.txt 是我们要打开的文件,第二个参数是文件模式。
读取文件
fscanf 和 fgets 函数用于对文件执行读取操作。这两种方法都执行与 scanf 和 gets 相同的操作,但它们考虑了一个称为文件指针的额外参数。
你可以选择逐个字符或逐行读取文件,具体取决于你希望如何组织信息。以下是读取文件所需的代码示例。
FILE* fp;
fp = fopen("shanii.txt", "r");
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
写一个文件
用于读取文件的函数 fprintf 和 fputs 也可以用于写入文件,其过程与读取文件非常相似。写入文件时使用的命令如下所示:
FILE *fp;
fp = fopen("shanii.txt", "w");
fprintf(fp, "%s %s %s %d", "I", "am", "Zeeshan", 2000);
关闭文件
在成功完成所有操作后,你必须始终关闭文件。你必须使用 fclose 函数才能成功关闭文件。
关闭文件的代码如下所示:
FILE *fp;
fp = fopen("fileName.txt", "w");
fprintf(fp, "%s %s %s %d", "I", "am", "Zeeshan", 2000);
fclose(fp);
C 语言中的 EOF 示例
例如,查看以下 C 代码以在屏幕上显示名为 shanii.txt 的文本文件的内容。
getc() 的值首先与 EOF 进行比较。
int charac = getc(filepointer);
while (charac != EOF) {
  putchar(charac);
  charac = getc(filepointer);
}
然后,使用 feof() 执行第二次检查。此检查确保程序仅在到达文件末尾时输出 Program has reached End-of-file。
if (feof(filepointer)) {
  printf("\n Program has reached End-of-file");
}
否则程序将显示 There was a problem。
源代码:
#include <stdio.h>
int main() {
  FILE *filepointer = fopen("shanii.txt", "r");
  int charac = getc(filepointer);
  while (charac != EOF) {
    putchar(charac);
    charac = getc(filepointer);
  }
  if (feof(filepointer)) {
    printf("\n Program has reached End-of-file");
  } else {
    printf("\n There was a problem");
  }
  fclose(filepointer);
  getchar();
  return 0;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn