在C语言中,我们使用文件操作函数来读取和写入数据,对于输入文件(input file),我们可以使用fopen
、fgetc
、fgets
等函数来实现文件的打开、读取和关闭,下面将详细介绍如何在C语言中使用输入文件。
1、打开文件
在C语言中,我们使用fopen
函数来打开一个文件。fopen
函数的原型如下:
FILE *fopen(const char *filename, const char *mode);
filename
是要打开的文件名,mode
是文件打开模式,如只读、写入等。fopen
函数返回一个指向FILE
结构的指针,如果打开失败,则返回NULL
。
我们要打开一个名为input.txt
的文件进行读取,可以使用以下代码:
#include <stdio.h> int main() { FILE *file = fopen("input.txt", "r"); if (file == NULL) { printf("无法打开文件! "); return 1; } // 接下来可以进行文件读取操作 // ... fclose(file); // 关闭文件 return 0; }
2、读取文件内容
在C语言中,我们可以使用以下几种方法来读取文件内容:
fgetc
:逐个字符读取文件内容。
fgets
:一行一行地读取文件内容。
fscanf
:按照指定的格式读取文件内容。
feof
:判断是否到达文件末尾。
下面我们分别介绍这些函数的用法。
2、1 fgetc
函数
fgetc
函数用于从文件中逐个字符地读取数据,它的原型如下:
int fgetc(FILE *stream);
stream
是指向要读取的文件的指针。fgetc
函数返回读取到的字符,如果到达文件末尾或发生错误,则返回EOF(通常是1)。
我们要读取一个名为input.txt
的文件中的字符,可以使用以下代码:
#include <stdio.h> int main() { FILE *file = fopen("input.txt", "r"); if (file == NULL) { printf("无法打开文件! "); return 1; } int ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); // 输出字符 } fclose(file); // 关闭文件 return 0; }
2、2 fgets
函数
fgets
函数用于从文件中一行一行地读取数据,它的原型如下:
char *fgets(char *str, int n, FILE *stream);
str
是一个字符数组,用于存储读取到的数据;n
是要读取的最大字符数;stream
是指向要读取的文件的指针。fgets
函数返回读取到的字符串,如果到达文件末尾或发生错误,则返回NULL,注意,最后一个字符会自动添加一个换行符’
‘。
我们要读取一个名为input.txt
的文件中的一行数据,可以使用以下代码:
#include <stdio.h> #include <string.h> int main() { FILE *file = fopen("input.txt", "r"); if (file == NULL) { printf("无法打开文件! "); return 1; } char line[100]; // 定义一个字符数组,用于存储一行数据 while (fgets(line, sizeof(line), file) != NULL) { // 逐行读取文件内容,直到到达文件末尾或发生错误为止 printf("%s", line); // 输出读取到的一行数据 } fclose(file); // 关闭文件 return 0; }
2、3 fscanf
函数和feof
函数
fscanf
函数用于按照指定的格式从文件中读取数据,它的原型如下:
int fscanf(FILE *stream, const char *format, ...);
stream
是指向要读取的文件的指针;format
是一个格式化字符串,用于指定数据的格式;后面的省略号表示可变参数列表,用于接收读取到的数据。fscanf
函数返回成功匹配并赋值的参数个数,如果到达文件末尾或发生错误,则返回EOF(通常是1),与C语言中的其他输入函数类似,我们也可以使用格式化字符串来控制数据的读取方式,使用"%d"表示读取一个整数,使用"%s"表示读取一个字符串等,我们还可以使用"%*s"来跳过某个字段,注意,在使用可变参数列表时,需要使用va_start、va_arg和va_end宏来处理可变参数。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/407025.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复