C语言读取文件(fscanf()、fgetc()和fgets())
在 C语言中,我们可以使用多种函数来读取文件内容。
与 scanf() 函数类似,fscanf() 函数根据格式字符串从文件中读取数据,并将读取的数据存储到指定的变量中。不同之处在于,fscanf() 函数从一个 FILE 指针指向的文件中读取数据,而不是从标准输入(如键盘)中读取数据。
fscanf()函数的原型如下:
下面程序展示了如何使用 fscanf() 函数从文件中读取数据。在这个例子中,我们以只读模式 "r" 打开文件。
为了解决这个问题,我们可以使用类似于 getchar() 函数的 fgetc() 函数,从文件中读取一个字符并吸收这个换行符 '\n'。
fgetc() 函数从一个 FILE 指针指向的文件中读取一个字符,并返回该字符的 ASCII 码,如果到达文件末尾或遇到读取错误,则返回 EOF(end of file)。
fgetc() 函数的原型如下:
返回值:
现在,我们使用 fgetc() 函数吸收换行符'\n',从而对前面实例的代码进行修改:
接下来,我们讨论 fgetc() 函数在遇到文件结尾或失败时返回的 EOF。EOF 是一个表示文件结束的标识符,在 C语言中,它通常被定义为一个整数常量 -1,并被包含在
当使用文件 I/O 函数(如 fgetc()、fscanf() 等)读取文件时,如果到达文件末尾或遇到读取错误,这些函数会返回 EOF 值,以便程序员判断文件是否已经读取完毕。
例如,在使用 fgetc() 函数逐字符读取文件时,我们可以通过检查该函数返回值是否为 EOF 来判断文件是否已经读取完毕。
fgets() 函数从一个 FILE 指针指向的文件中读取一行字符串(包括换行符),并将读取的字符串存储到指定的字符数组中。当到达指定的最大字符数或遇到文件末尾时,读取操作会停止。
fgets() 函数的原型如下:
例如,我们先声明一个具有 100 字节的 char 类型数组,数组名为 str,用于存储从文件中读取的一行字符串。如果文件中的一行字符串超过 100 个字符,将这一行字符串放置到 str 数组中将导致越界。因此,我们可以使用第二个参数 count 来限制读取的最大字符数。
下面程序是一个使用 fgets() 函数的示例。在运行程序之前,需要确保文件中有内容。
C语言fscanf()函数
在 C语言中,fscanf() 是一个用于从文件中读取格式化输入的库函数,该函数在<stdio.h>
头文件中。与 scanf() 函数类似,fscanf() 函数根据格式字符串从文件中读取数据,并将读取的数据存储到指定的变量中。不同之处在于,fscanf() 函数从一个 FILE 指针指向的文件中读取数据,而不是从标准输入(如键盘)中读取数据。
fscanf()函数的原型如下:
int fscanf() (FILE * stream, const char * format, ...);参数说明:
- stream:一个指向 FILE 类型的指针,指示要从中读取数据的文件。fopen() 函数通常用于用户打开文件并获取此指针;
- format:一个常量字符指针,指定格式字符串。格式字符串中可以包含普通字符和转换说明符,用于控制输入的格式。转换说明符以 % 符号开始,后跟一个或多个标志、宽度、精度和类型字符;
- ...:可变参数列表,与格式字符串中的转换说明符一一对应。根据转换说明符的类型,传入相应的指针参数以接收读取的数据。
下面程序展示了如何使用 fscanf() 函数从文件中读取数据。在这个例子中,我们以只读模式 "r" 打开文件。
#include <stdio.h> int main() { FILE* pFile = fopen("data.txt", "r"); if (pFile == NULL) { return -1; } int n; double f; char ch; fscanf(pFile, "%d", &n); fscanf(pFile, "%lf", &f); fscanf(pFile, "%c", &ch); printf("%d\n", n); printf("%f\n", f); printf("%c\n", ch); fclose(pFile); return 0; }假设 data.txt 存储的内容为:
123
3.141500
A
123
3.141500
为了解决这个问题,我们可以使用类似于 getchar() 函数的 fgetc() 函数,从文件中读取一个字符并吸收这个换行符 '\n'。
C语言fgetc()函数
在 C语言中,fgetc() 是一个用于从文件中读取单个字符的库函数,该函数在<stdio.h>头文件中。fgetc() 函数从一个 FILE 指针指向的文件中读取一个字符,并返回该字符的 ASCII 码,如果到达文件末尾或遇到读取错误,则返回 EOF(end of file)。
fgetc() 函数的原型如下:
int fgetc (FILE * stream);参数 stream 是一个指向 FILE 类型的指针,指示要从中读取字符的文件。fopen() 函数通常用于打开文件并获取此指针。
返回值:
- 成功:返回读取到的字符的 ASCII 码。
- 失败:返回 EOF。
现在,我们使用 fgetc() 函数吸收换行符'\n',从而对前面实例的代码进行修改:
#include <stdio.h> int main() { FILE* pFile = fopen("data.txt", "r"); if (pFile == NULL) { return -1; } int n; double f; char ch; fscanf(pFile, "%d", &n); fscanf(pFile, "%lf", &f); // 吸收上一行末尾的'\n' fgetc(pFile); fscanf(pFile, "%c", &ch); printf("%d\n", n); printf("%f\n", f); printf("%c\n", ch); fclose(pFile); return 0; }运行结果为:
123
3.141500
A
接下来,我们讨论 fgetc() 函数在遇到文件结尾或失败时返回的 EOF。EOF 是一个表示文件结束的标识符,在 C语言中,它通常被定义为一个整数常量 -1,并被包含在
<stdio.h>
头文件中。当使用文件 I/O 函数(如 fgetc()、fscanf() 等)读取文件时,如果到达文件末尾或遇到读取错误,这些函数会返回 EOF 值,以便程序员判断文件是否已经读取完毕。
例如,在使用 fgetc() 函数逐字符读取文件时,我们可以通过检查该函数返回值是否为 EOF 来判断文件是否已经读取完毕。
int ch; while ((ch = fgetc(file)) != EOF) { // 处理读取到的字符 }在这个示例中,当 fgetc() 函数返回 EOF 时,while 循环结束,表示文件已经被完全读取。
C语言fgets()函数
在 C语言中,fgets() 是一个用于从文件中读取一行字符串的库函数,该函数在<stdio.h>
头文件中。fgets() 函数从一个 FILE 指针指向的文件中读取一行字符串(包括换行符),并将读取的字符串存储到指定的字符数组中。当到达指定的最大字符数或遇到文件末尾时,读取操作会停止。
fgets() 函数的原型如下:
char * fgets (char * str, int count, FILE * stream);参数说明:
- str:一个字符指针,指向一个字符数组,用于存储从文件中读取的字符串。读取的字符串会以空字符(\0)结尾;
- count:一个整数,表示从文件中读取的最大字符数(包括空字符)。它通常被设置为字符数组的大小;
- stream:一个指向 FILE 类型的指针,指示要从中读取字符串的文件。fopen() 函数通常用于打开文件并获取此指针。
例如,我们先声明一个具有 100 字节的 char 类型数组,数组名为 str,用于存储从文件中读取的一行字符串。如果文件中的一行字符串超过 100 个字符,将这一行字符串放置到 str 数组中将导致越界。因此,我们可以使用第二个参数 count 来限制读取的最大字符数。
char buffer[100]; fgets(buffer, 100, pFile);返回值:
- 成功:返回指向字符数组的指针(即参数 str);
- 失败:如果在读取过程中遇到错误或到达文件末尾,则返回 NULL。
下面程序是一个使用 fgets() 函数的示例。在运行程序之前,需要确保文件中有内容。
#include <stdio.h> int main() { FILE* pFile = fopen("data.txt", "r"); if (pFile == NULL) { return -1; } char buffer[100]; while (fgets(buffer, 100, pFile) != NULL) { printf("%s", buffer); } fclose(pFile); return 0; }运行结果为:
123
3.141500
A
相关文章
- C语言fscanf和fprintf函数的用法详解(格式化读写文件)
- C语言fseek()随机读写文件(图文并茂,附带实例)
- C语言fgetc和fputc函数用法详解(以字符形式读写文件)
- C语言rewind和fseek函数的用法详解(随机读写文件)
- C语言fgets和fputs函数的用法详解(以字符串的形式读写文件)
- C语言fread和fwrite的用法详解(以数据块的形式读写文件)
- C语言rewind()和fseek()随机读写文件的用法(附带实例)
- C语言scanf:读取从键盘输入的数据(含输入格式汇总表)
- C语言fgets():从文件读取一个字符串
- C语言fgetc():从文件中读取一个字符