| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【c语言】一些标准I/O函数 -> 正文阅读 |
|
[C++知识库]【c语言】一些标准I/O函数 |
参考资料:c primer plus 目录 1.int main(int argc,char*argv[]) 5.fseek()与ftell(),以及fgetpos()和fsetpos() ?7.int feof(FILE*fp)和int ferroe(FILE*fp) 一、文件? ? ?1.流(stream)和文件(file):? (1)文件? ? ??????????文件通常是磁盘或固态硬盘上一段以命名的存储区。例如:stdio.h,还有你所写的c程序。 ????????C 语言提供两种文件方式:文本模式和二进制模式。? ? ? ? (2)流? ? ? ???????????流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。 ????????流是一个逻辑设备,和文件有着相同的行为。?????????? 2.文件指针FILE?? ? ? ? 它是typedef定义的,如果有兴趣,可以去了解。 ? ? ? ? 它是一个结构指针,是一个新的数据类型,是一个包含文件管理数据的结构指针,在打开一个文件之前必须定义一个文件指针。
? ? ? ? argc表示argv中存放string的个数。argc的值是获取命令行参数的,一般情况下,argc的值为1(你只运行该程序,没有写入其他文件时)。 ? ? ? ? argv是一个指针数组,它存储的是各命令行参数? 。? ?? //这里主要说linux,因为我使用的就是linux
? ? ? ? 现在我们打开终端(windows则按win+r输入cmd,打开那个熟悉的黑框)。
????????? ? ? ? ? ? ? ?? ????????就会出现这些东西了,可以看见argc=4 ,? 123,hello,world则分别是argv[1],argv[2],argv[3] ? ? ? ? 记得是运行test,而不是test.c
? ? ? ? exit()函数是关闭所有打开的文件并结束程序,正常结束会传递0,异常结束程序传递其他非零值,不同退出值可用于区分退出原因: ? ? ? ? 比如:
? ? ? ? 如果你在一个函数中使用exit则会关闭程序,而非跳出该函数. ? ? ? ? 而如果你在一个非main函数中使用return则会跳出该函数,在main函数中使用return则会跳出程序。 ? ? ? ? return会将控制权交给上一级的递归。 ? ? ? ? 也就是说在main函数中return 0; ? ? ? ? 与 exit(0);作用等同。 ????????stdlib.h头文件中 定义了两个变量: ????????#define EXIT_SUCCESS 0 3.fopen()与fclose()?(1)fopen()? ? ? ?fopen()的作用是打开文件声明在stdio.h中 ? ? ? ? 原型为?
? ? ? ? 第一个参数是待打开的文件的名称,更具体地说是一个包含改文件名的字符串地址。 ? ? ? ? 第二个参数是一个字符串,制定待打开文件的模式。
????????? ? ? ??
? ? ? ? 程序成功打开文件后,fopen()将返回文件指针,其他I/O函数可以用该指针处理这个文件。 ? ? ? ? 文件指针并不指向实际的文件,而是指向一个包含文件信息的数据对象,其中包含操作文件的I/O函数所用的缓冲区信息。? ? ? ? ? ? 注意:同一时间打开的文件数是有限的。? ? ?? (2)fclose()?? ? ? ? fclose()的作用是关闭fp指向的文件. ? ? ? ? 函数原型:????????
? ? ? ? fclose如果关闭成功,将返回一个0,否则返回EOF 2.putc()与getc()????????? putc()和gets()与getchar()和putchar()类似,但有所不同的一点是,前者需要告诉使用哪一个文件,后者默认输入输出设备(键盘和显示屏)。 ? ? ? ? ch=getchar()? 等效于 ch=getc(stdin) ????????putc(ch,stdout) 等效于 putchar(ch) ????????实际上,putchar()和getchar()通过putc()和getc()定义? ? ? ? ? ? ? ? 3.fprintf()与fscanf()(1)fprintf???????? 将argument内各项的值,按format(格式控制字符串)所表示的格式,将数据格式为字符串的形式写入到文件指针fp指向的文件中。 ? ? ? ? fprint()? ?的函数原型为
? ? ?作用与printf()类似 ? ? ? fprintf()是将内容输入到stream中
(2)fscanf()? ? ? ?fscanf()的函数原型为:
????????从文件指针fp指向的文件中,按format中对应的控制格式读取数据,并存储在[argument...]对应的变量中;????????? ????????fscanf 函数与 scanf 类似,只不过前者用于读取文件流的数据。
?4.fgets()和fputs()? ? ? (1)fgets()? ? ? ? ? ?fgets()的函数原型是:
?????????s为储存输入位置的地址,n为字符串大小,stream为指向FILE的指针(待读文件) ? ? ? ? fgets()函数读取输入知道第一个换行符的后面,或者读到文件结尾,或者读n-1个字符。 ? ? ? ? fgets会在末尾添加一个“\0”使之成为一个字符串。 ? ? ? ? fgets()在读到EOF时将返回NULL;如果没有则返回之前传给它的第一个参数指针;当n<=0 时返回NULL,即空指针;当n=1 时,返回空串""。 ? ? ? ? (2)puts() ? ? ? ? puts()的函数原型为:
? ? ? ? ?s为字符串的地址,stream为文件指针。 ? ? ? ? 该函数的作用是跟据传入地址找到的字符串写入指定的文件中。 ? ? ? ? 注意:fputs()在打印时不会在末尾加换行符。
5.fseek()与ftell(),以及fgetpos()和fsetpos()(1)fseek()? ? ? ? 函数原型:
? ? ? ? fseek的作用是将fopen打开的文件直接移动到任意字节处。 ???第一个参数stream为文件指针 ? ? ?(2)ftell()? ? ? ? 函数原型:
? ? ? ? ftell的作用是获取文件流的读取位置。
? ? ? ??这个程序的目的是获取你一共向文件中写了多少个字符。 (3)fgetpos()和fsetpos()? ? ? ? fseek()和ftell()的长度为long,但目前文件越来越大,long已无法满足需求,因此,ANSIC新增了fgetpos()和fsetpos(),这两个新定位函数采用了新类型:fpos_t类型,(file position type),但fpos_t不是基本类型,它由其他类型来定义。fpos_t类型的变量或数据对象可以在文件中指定一个位置,它不能是数组结构。
????????? 6.fwrite()和fread()? ? ? ? (1)fwrite()? ? ? ? 函数原型:
?????????fwrite()通常把二进制数值写入文件。 ? ? ? ? ptr是待写入数据块的地址。 ????????size表示待写入的数据块的大小,单位为字节。 ????????nmemb表示待写入数据块的数量,每个数据块的大小为 size 字节。 ????????stream是指定待写入的文件。
`fwrite会返回成功写入的项的数量,正常情况下就是nemmb. ? ? ? ? (2) fread()? ? ? ? 函数原型:
ptr是待读文件数据在内存上的地址。
?7.int feof(FILE*fp)和int ferroe(FILE*fp)? ? ? ? 一般情况下函数返回EOF,则通常表示函数已经到达文件结尾。但是当文件读取错误时,函数也会返回EOF,为了区分这种情况,就有了这两个函数‘ ? ? ? ? fefo()函数返回一个非0值时表示达到文件结尾,否则返回0. ? ? ? ? ferror()函数返回一个非0值时,表示读写错误,否则返回0. 8.rewind()? ? ? ? 表示返回文件开头。 函数原型
与fseek(FILE*stream,0L,SEEK_SET)效果一样。 9.int ungetc(int c,FILE *fp)?????????把c指定的字符放回输入流,当下次调用标准输出时将读取该字符。 ? ? ? ? 注意:如果放入多个字符,调用时读取方向将会与放入方向相反。
? ? ? ? 根据ungetc来说,应该输出"hello world",但实际上只输出了"hello w",我便进行了以下测试:
? ? ? ? ?结果是还是输出“hello w”后等待输入,我猜测可能是因为标准输入流stdin无法使用ungetc放回任何字符,标准输入stdin只支持从键盘输入字符; 10.fflush()? ? ? ? 函数原型
? ? ? ? fflush()的作用是引起输出缓冲区中所有未写入的数据,发送到fp所指定的输出文件。这个过程就是刷新缓冲区,如果fp为空指针,则刷新所有输出缓冲区。 11.setvbuf()? ? ? ? 函数原型:
? ? ? ? 它的作用是创建一个供I/O函数替换使用的缓冲区,在打开文件后且未对流操作时使用此函数。 ? ? ? ? fp识别待处理的流。 ????????buf指向待使用的存储空间,如果buf值不为NULL,则必须创建一个缓存区。 ? ? ? ? mode: ? ? ? ? ? ? ? ? _IOFBF:完全缓冲区(在缓冲区满时刷新); ? ? ? ? ? ? ? ? _IOLBF:行缓冲(在缓冲区满或者写入一个换行符时) ? ? ? ? ? ? ? ? _IONBF:无缓冲 操作成功返回0,否则返回非0.
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:20:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |