呕心沥血的文件 学习总结

一.格式化输入输出

人话:%与数据类型之间还可以增加的内容。

 

1.类型总结

 

(1)数字

意义:总共输出的位数(包括自身定义的数字)。

 

示例:printf(”%4d“,666);

 

输出结果: 666

 

(2)‘-’

意义:左对齐。

 

示例:printf(“%-4d”,666);

 

输出结果:666    

 

(3)‘+’

意义:强制输出。

 

示例:printf(“%++4d”,666)

 

输出结果:+666(’+’也占据了其中一个位置,总共4个位置不变;如果要输出‘-’,则需要在在+前加个‘-’)

 

(4)’0‘

意义:将空位填充为0.

 

示例:printf(“%04d”,666);

 

输出结果:0666

 

(5)’%.number d‘

意义:精确到小数点几位,其中位数延展长度取决于number的大小。

 

示例:保留三位小数:

           printf("%.3d",i);

 

(6)‘*’的运用

意义:下一个参数是字符数。

 

示例:printf(”%*d“,6,789);(这里6是用来填充到*的位置的,而789是%d)

 

输出结果:6789

 

延展用法:

 

‘.*’ :   ‘*’的意义变为指代小数点位数的大小,而*填充数的位置仍如上同出一辙。

 

2.输出不同数据类型时的不同格式。(取一些平时不常见的)

 

(1)八进制:%o

 

(2)十六进制:%x(若想输出字母大写的十六进制则将x换成X)

 

(3)十六进制浮点数:%a

 

(4)指数:%e

 

(5)无符号整型:%u

 

(6)%n:前面所输出的数据个数

 

示例:int num;

 

           printf(”%hhd%n\n“,12345,&num);(这里必须是用num的指针,否则会得到惊喜的结果(指乱码))

 

           printf(“%d”,num);

 

输出结果:57

                  2

 

(7)scanf(“%6c”,&a);

 

意义:只输出该字符数组的前6空中的字符。

(加一条,如果在scanf使用的时候数据类型用八进制的%o,如果输入数据为八进制数,会转换成十进制数,就,就完成了进制转换!再见循环%8逆序输出法求八进制数0v0)

 

二.文件的输入输出。

 

原理:很简单,xxxxxxxx>12.out

数据结果放置到文件中。

xxxxxxx<12.in

将数据放回原位。

 

格式:

(1)定义文件指针:
          file*fp;

 

(2)新建一个文件

fp = fopen(“文件名.txt”,“w”)

 

(3)打开文件if(fp = fopen(内容)== NULL)

{

printf(”error“);

}

exit;

 

(4)文件的输入与输出

 

<1>输入的过程一般是常规的定义一个数据并且赋值,重点是在于输出的过程

 

<2>fprintf(fp,“%d”,i);

 

<3>fclose(fp) (断流)

 

<4>system("type文件名.txt")(这一步是为了能看到文件内的数据,如果是return 0;则无法通过终端看到任何数据,原因是因为数据全部都转移到了文件中去了,这里system(type)也是一个函数类型,我会总结一个system函数合集给自己看QAQ)

 

代码示例:

 

 

若直接是return 0;

 

 

1.fprintf用法

格式:fprintf(指针名,“%d”,123);

 

意义:输出文件内容。

 

返回值:fprintf的返回值为字符数,出现错误时会返回负值。

”stderr“、“stdout”的区别

 

格式:

fprintf(stderr,“内容”);

fprintf(stdout,“内容”);

 

意义的差异:

(1)stderr输出到屏幕

(2)stdout输出到磁盘文件,但是两者默认向屏幕输出(我自己按照大神的代码敲了发现并没有因为是否经过缓冲而产生位置的颠倒,所以我觉得目前它俩对我来说先一视同仁)

 

2.sprintf用法

格式:sprintf(指针名,“%s”,)

 

意义:把格式化的数据写入某个字符串中。

 

返回值:字符串长度。

 

与fprintf的区别:最本质的是fprintf的数据转移的目的地是上方定义的FILE *fe(文件)中,而sprintf数据转移的目的地是char s[]这一字符串中。

 

3.fclose(指针名)

意义:关闭一个流。(。。。。。。。)

(我去看了看别人的说法,似乎fflush也能实现缓冲区数据的移位,但是过程并不是关闭,而是刷新,它还有个功能是清除缓冲区的数据,也不知道系统到底是怎么去认识并且区分的,还是说这俩是相同效果,不同环境下叫法不同?)

 

人话版:我个人认为是一个容错处理,百度上的说法是向文件输入数据的这个过程中,是先将数据输入到一个缓冲区,只有当缓冲区充满或者刷新指令发出之后才会将整体数据转换到文件内,如果缓冲区数据未填满,而程序运行结束,则会导致数据丢失。

 

4.fopen("文件名.txt",“w”)中的“w”是什么?

定义:原型是const char *mode,是c字符串(前面的文件名也是c字符串,两者共同写在fopen函数内部),其功能是确立访问文件的模式(这也代表有许多模式ovo)

 

分类:

 图选自:C 库函数 – fopen() | 菜鸟教程 (runoob.com)

 

返回值:
必须返回FILE指针或者NULL

 

三.二进制文件(我们先前的文件形式都是文本文件,人可以直观读的形式)

意义:所有文件最终都会是二进制形式,文本文件是用最简单的方式读写文件,且二进制文件需要专门的程序来读写文件,文本文件的输入输出是格式化的,可能经过转码。

 

常用软件:unix(喜欢用文本文件来做数据存储和程序配置)、windows(多是二进制文件)

 

与文本文件的区别:
(1)二进制文件是不可以跨平台的,而文本文件可以跨平台。

(2)二进制程序读写快。

 

格式:

fwrite(str,sizeof(char),长度,fp);格式

feof

while(!feof(fp))

返回值:已经到达尾部:1

               未到达:0

rewind函数文件指针指向文件开头(相当于fseek(fp,0,seek_))

posted @ 2021-12-17 09:58  赵颖  阅读(129)  评论(1编辑  收藏  举报