山西省经济建设投资公司网站,做付费软件网站,前端开发线上培训,湖北微网站建设费用超详细讲解文件函数#xff01;#xff01;#xff01;#xff01;字符输入/输出函数fgetcfputc文本行输入/输出函数fgetsfputs格式化输入/输出函数fscanffprintf二进制输入/输出函数freadfwrite打开/关闭文件函数fopenfclose字符输入/输出函数
fgetc fgetc函数可以从指定…
超详细讲解文件函数字符输入/输出函数fgetcfputc文本行输入/输出函数fgetsfputs格式化输入/输出函数fscanffprintf二进制输入/输出函数freadfwrite打开/关闭文件函数fopenfclose字符输入/输出函数
fgetc fgetc函数可以从指定的流 stream 获取下一个字符一个无符号字符并把位置标识符往前移动。 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了要在上面执行操作的流 该函数以无符号 char 强制转换为 int 的形式返回读取的字符如果到达文件末尾或发生读错误则返回 EOF。 下面演示了 fgetc函数的用法
int main ()
{FILE *fp;int c;int n 0;fp fopen(file.txt,r);if(fp NULL) {perror(打开文件时发生错误);return(-1);}do{c fgetc(fp);if( feof(fp) ){break ;}printf(%c, c);}while(1);fclose(fp);return(0);
}假设我们有一个文本文件 file.txt它的内容为We are in 2019 编译并运行上面的程序这将产生以下结果We are in 2019
fputc fputc函数把参数 char 指定的字符一个无符号字符写入到指定的流 stream 中并把位置标识符往前移动。 char – 这是要被写入的字符。该字符以其对应的 int 值进行传递。写入文件的字符是ASCII值 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了要被写入字符的流。 下面演示了 fputc函数的用法
#include stdio.h
int main ()
{FILE *fp;int ch;fp fopen(file.txt, w);for( ch 33 ; ch 100; ch ){fputc(ch, fp);}fclose(fp);return(0);
}让我们编译并运行上面的程序这将在当前目录中创建文件 file.txt它的内容如下
!#$%()*,-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcd
//一堆二进制码文件中无法看明白。文本行输入/输出函数
fgets 从指定的流 stream 读取一行并把它存储在 str 所指向的字符串内。当读取 (num-1) 个字符时或者读取到换行符时或者到达文件末尾时它会停止具体视情况而定。 str – 这是指向一个字符数组的指针该数组存储了要读取的字符串。 num – 这是要读取的最大字符数包括最后的空字符。通常是使用以 str 传递的数组长度。 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了要从中读取字符的流。 如果成功该函数返回相同的 str 参数。 如果到达文件末尾或者没有读取到任何字符str 的内容保持不变并返回一个NULL。如果发生错误返回一个NULL。 下面的演示了 fgets函数的用法
int main()
{FILE *fp;char str[60]fp fopen(file.txt , r);if(fp NULL) {perror(打开文件时发生错误);return(-1);}if( fgets (str, 60, fp)!NULL ) {/* 向标准输出 stdout 写入内容 */puts(str);}fclose(fp);return(0);
}假设我们有一个文本文件 file.txt它的内容如下 We are in 2023 编译并运行上面的程序这将产生以下结果 We are in 2023
fputs 把字符串写入到指定的流 stream 中但不包括空字符。 str – 这是一个数组包含了要写入的以空字符终止的字符序列。 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了要被写入字符串的流。
下面的演示了 fputs函数的用法
#include stdio.hint main ()
{FILE *fp;fp fopen(file.txt, w);fputs(这是 C 语言。, fp);fputs(这是一种系统程序设计语言。, fp);fclose(fp);return(0);
}编译并运行上面的程序这将创建文件 file.txt它的内容如下 这是 C 语言。这是一种系统程序设计语言。
格式化输入/输出函数
fscanf 从流 stream 读取格式化输入。 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了流。 format – 这是 C 字符串包含了以下各项中的一个或多个空格字符、非空格字符 和 format 说明符后面的省略号表明了他可以有多个变量甚至到无穷个变量。是可变参数列表
format 说明符形式为 [%[*][width][modifiers]type]具体讲解如下
参数描述*这是一个可选的星号表示数据是从流 stream 中读取的但是可以被忽视即它不存储在对应的参数中width这指定了在当前读取操作中读取的最大字符数。modifiers为对应的附加参数所指向的数据指定一个不同于整型针对 d、i 和 n、无符号整型针对 o、u 和 x或浮点型针对 e、f 和 g的大小 h 短整型针对 d、i 和 n或无符号短整型针对 o、u 和 x l 长整型针对 d、i 和 n或无符号长整型针对 o、u 和 x或双精度型针对 e、f 和 g L 长双精度型针对 e、f 和 gtype一个字符指定了要被读取的数据类型以及数据读取方式。具体参见下一个表格。fscanf 类型说明符 附加参数根据不同的 format 字符串函数可能需要一系列的附加参数每个参数包含了一个要被插入的值替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。 下面演示了 fscanf函数的用法
#include stdio.h
#include stdlib.hint main()
{char str1[10], str2[10], str3[10];int year;FILE * fp;fp fopen (file.txt, w);fputs(We are in 2014, fp);rewind(fp);fscanf(fp, %s %s %s %d, str1, str2, str3, year);printf(Read String1 |%s|\n, str1 );printf(Read String2 |%s|\n, str2 );printf(Read String3 |%s|\n, str3 );printf(Read Integer |%d|\n, year );fclose(fp);return(0);
}编译并运行上面的程序这将产生以下结果
Read String1 |We|
Read String2 |are|
Read String3 |in|
Read Integer |2014|fprintf 发送格式化输出到流 stream 中。、 stream – 这是指向 FILE 对象的指针该 FILE 对象标识了流。 format – 这是 C 字符串包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签format 标签可被随后的附加参数中指定的值替换并按需求进行格式化。
format 标签属性是 %[flags][width][.precision][length]specifier具体讲解如下
specifier说明符输出c字符d 或 i有符号十进制整数e使用 e 字符的科学科学记数法尾数和指数E使用 E 字符的科学科学记数法尾数和指数f十进制浮点数g自动选择 %e 或 %f 中合适的表示法G自动选择 %E 或 %f 中合适的表示法o有符号八进制s字符的字符串u无符号十进制整数x无符号十六进制整数X无符号十六进制整数大写字母p指针地址n无输出%字符width宽度描述number要输出的字符的最小数目。如果输出的值短于该数结果会用空格填充。如果输出的值长于该数结果不会被截断。*宽度在 format 字符串中未指定但是会作为附加整数值参数放置于要被格式化的参数之前。
precision精度描述.number对于整数说明符d、i、o、u、x、Xprecision 指定了要写入的数字的最小位数。如果写入的值短于该数结果会用前导零来填充。如果写入的值长于该数结果不会被截断。精度为 0 意味着不写入任何字符。1、对于 e、E 和 f 说明符要在小数点后输出的小数位数。2、对于 g 和 G 说明符要输出的最大有效位数。3、对于 s: 要输出的最大字符数。默认情况下所有字符都会被输出直到遇到末尾的空字符。4、对于 c 类型没有任何影响。当未指定任何精度时默认为 1。如果指定时不带有一个显式值则假定为 0。.*精度在 format 字符串中未指定但是会作为附加整数值参数放置于要被格式化的参数之前。
length长度描述h参数被解释为短整型或无符号短整型仅适用于整数说明符i、d、o、u、x 和 X。I参数被解释为长整型或无符号长整型适用于整数说明符i、d、o、u、x 和 X及说明符 c表示一个宽字符和 s表示宽字符字符串。L参数被解释为长双精度型仅适用于浮点数说明符e、E、f、g 和 G。
附加参数 – 根据不同的 format 字符串函数可能需要一系列的附加参数每个参数包含了一个要被插入的值替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
返回值 如果成功则返回写入的字符总数否则返回一个负数。 下面的演示了 fprintf函数的用法
#include stdio.h
#include stdlib.h
int main()
{FILE * fp;fp fopen (file.txt, w);fprintf(fp, %s %s %s %d, My, Hero, is, 2023);fclose(fp);return(0);
}编译并运行上面的程序这将创建文件 file.txt它的内容如下 My Hero is 2023。
二进制输入/输出函数
fread 从给定流 stream 读取数据到 ptr 所指向的数组中。 ptr – 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。 size – 这是要读取的每个元素的大小以字节为单位。 count – 这是元素的个数每个元素的大小为 size 字节。 stream – 这是指向 FILE 对象的指针该 FILE 对象指定了一个输入流。
下面演示了 fread函数的用法
int main()
{FILE *fp;char c[] This is an apple;char buffer[20];fp fopen(file.txt, w);fwrite(c, strlen(c) 1, 1, fp);fseek(fp, 0, SEEK_SET);fread(buffer, strlen(c)1, 1, fp);printf(%s\n, buffer);fclose(fp);return(0);
}编译并运行上面的程序将创建一个文件 file.txt然后写入内容 This is an apple。
fwrite 把 ptr 所指向的数组中的数据写入到给定流 stream 中。 ptr – 这是指向要被写入的元素数组的指针。 size – 这是要被写入的每个元素的大小以字节为单位。 count – 这是元素的个数每个元素的大小为 size 字节。 stream – 这是指向 FILE 对象的指针该 FILE 对象指定了一个输出流。
下面演示了 fwrite函数的用法
int main ()
{FILE *fp;char str[] This is an apple;fp fopen( file.txt , w );fwrite(str, sizeof(str) , 1, fp );fclose(fp);return(0);
}编译并运行上面的程序这将创建一个文件 file.txt它的内容如下This is an apple
打开/关闭文件函数
fopen
使用给定的模式 mode 打开 filename 所指向的文件。
文件使用方式含义如果指定文件不存在“r”只读为了输入数据打开一个已经存在的 文本文件出错“w”只写为了输出数据打开一个文本文件建立一个新的文件“a”追加向文本文件尾添加数据建立一个新的文件“rb”只读为了输入数据打开一个二进制文件出错“rb”只读为了输入数据打开一个二进制文件出错“wb”只写为了输出数据打开一个二进制文件建立一个新的文件“ab”追加向一个二进制文件尾添加数据出错“r”读写为了读和写打开一个文本文件出错“w”读写为了读和写建议一个新的文件建立一个新的文件“a”读写打开一个文件在文件尾进行读写建立一个新的文件“rb”读写为了读和写打开一个二进制文件出错“wb”读写为了读和写新建一个新的二进制文件建立一个新的文件“ab”读写打开一个二进制文件在文件尾进行读和写建立一个新的文件
该函数返回一个 FILE 指针。否则返回 NULL且设置全局变量 errno 来标识错误。
#include stdio.h
#include stdlib.hint main()
{FILE * fp;fp fopen (file.txt, w);fprintf(fp, %s %s %s %d, We, are, in, 2023);fclose(fp);return(0);
}运行上述代码则收获一个带有以下内容的文件 file.txtWe are in 2023
fclose 关闭流 stream刷新所有的缓冲区。 流成功关闭则该方法返回零。如果失败则返回 EOF。
/* fclose example */
#include stdio.h
int main ()
{FILE * pFile;pFile fopen (myfile.txt,wt);fprintf (pFile, fclose example);fclose (pFile);return 0;
}而正因为fclose这个特性因此我们每次打开文件输入数据后都必须手动使用fclose关闭文件否则我们写的数据很有可能会滞留在缓冲区而没有真正存入到硬盘中当程序结束后就会造成数据丢失。 我们平常使用Word等办公软件的时候本质上就是如此若不进行保存或者关闭文档后不执行保存操作我们的数据就会在缓冲区然后丢失而非存储到硬盘之中。
那么今天的文件函数的使用详解的相关内容我就讲述完啦因为个人能力有限文章难免会出现纰漏届时有错误可以私信发给我以及时更正谢谢大家