fgets 逐行读取文件

作者:编程家 分类: c++ 时间:2025-10-15

使用fgets逐行读取文件

在编程中,我们经常需要读取文件的内容以进行相应的操作。C语言中的标准库函数fgets()可以帮助我们逐行读取文件。它可以从文件中读取一行数据,并将其存储在一个指定的字符串缓冲区中。

下面是一个使用fgets逐行读取文件的案例代码:

c

#include

#define MAX_LINE_LENGTH 100

int main() {

FILE *file;

char line[MAX_LINE_LENGTH];

// 打开文件

file = fopen("example.txt", "r");

if (file == NULL) {

printf("无法打开文件\n");

return 1;

}

// 逐行读取文件内容并输出

while (fgets(line, sizeof(line), file) != NULL) {

printf("%s", line);

}

// 关闭文件

fclose(file);

return 0;

}

在上面的代码中,我们首先定义了一个最大行长度的常量`MAX_LINE_LENGTH`,用来限制每行读取的字符数。然后,我们打开一个名为"example.txt"的文件,并将其指针保存在变量`file`中。如果文件打开失败,我们会输出一条错误消息并返回1。

接下来,我们使用`fgets()`函数在一个循环中逐行读取文件内容。`fgets()`函数的第一个参数是一个字符数组,用来存储读取到的每一行数据;第二个参数是指定每行最大读取的字符数;第三个参数是文件指针,表示从哪个文件中读取。当`fgets()`函数成功读取一行数据时,它会返回一个非空指针;当到达文件结尾或发生错误时,它会返回空指针,循环将结束。

最后,我们关闭文件,释放资源,并返回0表示程序成功运行。

案例代码

c

#include

#define MAX_LINE_LENGTH 100

int main() {

FILE *file;

char line[MAX_LINE_LENGTH];

// 打开文件

file = fopen("example.txt", "r");

if (file == NULL) {

printf("无法打开文件\n");

return 1;

}

// 逐行读取文件内容并输出

while (fgets(line, sizeof(line), file) != NULL) {

printf("%s", line);

}

// 关闭文件

fclose(file);

return 0;

}

使用fgets逐行读取文件的好处

使用fgets函数逐行读取文件的好处是可以按行处理文件内容,方便进行相应的操作。例如,我们可以逐行读取一个包含学生信息的文件,然后对每个学生的成绩进行统计和分析。

案例分析:逐行读取学生信息

假设我们有一个名为"students.txt"的文件,每一行包含一个学生的姓名和成绩,如下所示:

张三 90

李四 85

王五 95

我们可以使用fgets函数逐行读取文件内容,并对每个学生的成绩进行统计和分析。下面是一个简单的示例代码:

c

#include

#include

#include

#define MAX_LINE_LENGTH 100

typedef struct {

char name[50];

int score;

} Student;

int main() {

FILE *file;

char line[MAX_LINE_LENGTH];

Student students[100];

int numStudents = 0;

// 打开文件

file = fopen("students.txt", "r");

if (file == NULL) {

printf("无法打开文件\n");

return 1;

}

// 逐行读取学生信息并存储到数组中

while (fgets(line, sizeof(line), file) != NULL) {

char *name = strtok(line, " ");

int score = atoi(strtok(NULL, " "));

strcpy(students[numStudents].name, name);

students[numStudents].score = score;

numStudents++;

}

// 统计和分析学生成绩

int totalScore = 0;

int maxScore = 0;

int minScore = 100;

for (int i = 0; i < numStudents; i++) {

totalScore += students[i].score;

if (students[i].score > maxScore) {

maxScore = students[i].score;

}

if (students[i].score < minScore) {

minScore = students[i].score;

}

}

float averageScore = (float) totalScore / numStudents;

// 输出统计结果

printf("学生人数:%d\n", numStudents);

printf("总分:%d\n", totalScore);

printf("平均分:%.2f\n", averageScore);

printf("最高分:%d\n", maxScore);

printf("最低分:%d\n", minScore);

// 关闭文件

fclose(file);

return 0;

}

在上面的代码中,我们定义了一个`Student`结构体,用来存储学生的姓名和成绩。然后,我们定义了一个包含100个学生的数组`students`,以及一个变量`numStudents`,用来记录实际学生人数。

接着,我们使用`fgets()`函数逐行读取"students.txt"文件中的学生信息,并将姓名和成绩分别存储到`name`和`score`变量中。然后,我们使用`strcpy()`函数将姓名复制到对应的学生结构体中,使用`atoi()`函数将成绩转换为整数并存储到对应的学生结构体中。最后,我们递增`numStudents`变量。

接下来,我们对学生的成绩进行统计和分析。我们使用循环遍历数组`students`,计算总分、最高分和最低分。然后,我们计算平均分,并将统计结果输出到屏幕上。

最后,我们关闭文件,释放资源,并返回0表示程序成功运行。

这个案例展示了如何使用fgets函数逐行读取文件,并对读取到的数据进行相应的处理和分析。通过逐行读取,我们可以方便地处理包含大量数据的文件,提取所需的信息,并进行相应的操作。这在处理学生信息、日志文件、配置文件等场景中非常有用。

使用fgets函数可以帮助我们逐行读取文件,方便进行相应的操作。通过逐行读取文件内容,我们可以按行处理文件数据,提取所需的信息,并进行相应的操作和分析。无论是处理学生信息、日志文件还是配置文件,fgets函数都是一个非常有用的工具。