C语言读取文件(fscanf()、fgetc()和fgets())

C语言读取文件(fscanf()、fgetc()和fgets())

在 C语言中,我们可以使用多种函数来读取文件内容。

C语言fscanf()函数

在 C语言中,fscanf() 是一个用于从文件中读取格式化输入的库函数,该函数在头文件中。

与 scanf() 函数类似,fscanf() 函数根据格式字符串从文件中读取数据,并将读取的数据存储到指定的变量中。不同之处在于,fscanf() 函数从一个 FILE 指针指向的文件中读取数据,而不是从标准输入(如键盘)中读取数据。

fscanf()函数的原型如下:

int fscanf() (FILE * stream, const char * format, ...);

参数说明:

stream:一个指向 FILE 类型的指针,指示要从中读取数据的文件。fopen() 函数通常用于用户打开文件并获取此指针;

format:一个常量字符指针,指定格式字符串。格式字符串中可以包含普通字符和转换说明符,用于控制输入的格式。转换说明符以 % 符号开始,后跟一个或多个标志、宽度、精度和类型字符;

...:可变参数列表,与格式字符串中的转换说明符一一对应。根据转换说明符的类型,传入相应的指针参数以接收读取的数据。

下面程序展示了如何使用 fscanf() 函数从文件中读取数据。在这个例子中,我们以只读模式 "r" 打开文件。

#include

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

fscanf() 函数成功地从文件中读取了前两个数据,但未能正确读取第三个数据。这是因为第三个 fscanf() 函数中的 %c 占位符期望获取一个字符,而上一行末尾正好有一个换行符 '\n'。因此,第三个 fscanf() 函数实际上读取了 '\n' 并赋值给了变量 ch。

为了解决这个问题,我们可以使用类似于 getchar() 函数的 fgetc() 函数,从文件中读取一个字符并吸收这个换行符 '\n'。

C语言fgetc()函数

在 C语言中,fgetc() 是一个用于从文件中读取单个字符的库函数,该函数在头文件中。

fgetc() 函数从一个 FILE 指针指向的文件中读取一个字符,并返回该字符的 ASCII 码,如果到达文件末尾或遇到读取错误,则返回 EOF(end of file)。

fgetc() 函数的原型如下:

int fgetc (FILE * stream);

参数 stream 是一个指向 FILE 类型的指针,指示要从中读取字符的文件。fopen() 函数通常用于打开文件并获取此指针。

返回值:

成功:返回读取到的字符的 ASCII 码。

失败:返回 EOF。

现在,我们使用 fgetc() 函数吸收换行符'\n',从而对前面实例的代码进行修改:

#include

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,并被包含在头文件中。

当使用文件 I/O 函数(如 fgetc()、fscanf() 等)读取文件时,如果到达文件末尾或遇到读取错误,这些函数会返回 EOF 值,以便程序员判断文件是否已经读取完毕。

例如,在使用 fgetc() 函数逐字符读取文件时,我们可以通过检查该函数返回值是否为 EOF 来判断文件是否已经读取完毕。

int ch;

while ((ch = fgetc(file)) != EOF) {

// 处理读取到的字符

}

在这个示例中,当 fgetc() 函数返回 EOF 时,while 循环结束,表示文件已经被完全读取。

C语言fgets()函数

在 C语言中,fgets() 是一个用于从文件中读取一行字符串的库函数,该函数在头文件中。

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

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

相关推荐

2010年世界杯喀麦隆队的表现与历史意义:非洲雄狮的荣耀与遗憾
锦衣搭配参考—鬼潇潇
365永久激活怎么做到的

锦衣搭配参考—鬼潇潇

📅 07-09 👁️ 3129
如何查看文件的MD5值 — macOS / Windows / Linux
世界杯365体育

如何查看文件的MD5值 — macOS / Windows / Linux

📅 09-16 👁️ 8930
天刀各大区服务器位置,数据帝玩家统计 天刀全区活跃地图展示
365永久激活怎么做到的

天刀各大区服务器位置,数据帝玩家统计 天刀全区活跃地图展示

📅 07-20 👁️ 8742
王者荣耀:亲测韩信4款皮肤,分分钟告诉你哪款手感最好!
怎么在企鹅直播上开直播
365永久激活怎么做到的

怎么在企鹅直播上开直播

📅 09-06 👁️ 8714
win10如何开启悬浮小窗
365永久激活怎么做到的

win10如何开启悬浮小窗

📅 07-29 👁️ 5415
为什么kies连接不上 原因分析与解决办法
365bet不能注册

为什么kies连接不上 原因分析与解决办法

📅 09-07 👁️ 666
魔域火能量之源攻略,高玩教你快速收集!
世界杯365体育

魔域火能量之源攻略,高玩教你快速收集!

📅 08-21 👁️ 4298