cprimer学习笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CPrimer始于2014-11-12文字颜色说明:1)正文中的黑色粗字体表示首次看时,觉得比较重要的文字2)正文中的红色表示,复习笔记后添加的知识点ANSI(AmericanNationalStandardsInstitute)美国国家标准协会第13章文件输入输出13.1和文件进行通信13.1.1文件是什么C将文件看成是连续的字节序列,其中每一个字节都可以单独的读取;13.1.2文本视图和二进制视图二进制视图中,每一个字节都可以为程序所访问;文本视图中,不同的操作环境(操作系统),程序所看到的内容和文件有可能不同(例如行尾的标志)13.1.4标准文件C语言提供3种标准文件。标准输入、标准输出、标准错误输出;标准输入:getchar()、gets()、scanf()标准输出:putchar()、puts()、printf()13.2标准I/O13.2.1检查命令行参数return0与exit(0)的区别:最初调用的main函数中二者是一样的,main在一个递归程序中时,exit()会终止程序,而return只返回递归的前一级。在main函数以外的函数中调用exit也会终止程序13.2.2fopen()函数fopen(参数1,参数2)参数1:是一个地址(指针或数组),数组中包含要打开的文件名参数2:是一个字符串,指定打开文件的模式。有以下7大类模式1)“r”打开一个文本文件,可以读取文件2)“w”打开一个文本文件,可以写入文件,先将文件长度截为0。若该文件不存在,先创建3)“a”打开一个文本文件,向已有文件的尾部追加内容。若不存在,先创建4)“r+”打开一个文本文件,可以进行更新,也可以读取和写入5)“w+”打开一个文本文件,可以进行更新(读取和写入)。先将文件长度截为0,没有则先创建6)“a+”打开一个文本文件,可以进行更新(读取和写入),读取整个文件,写入时只能向尾部追加内容返回:fopen函数返回一个文件指针fp,这个指针指向FILE(stdio.h中定义的一种派生类型),fp指向关于文件的信息的数据包。如果不能打开文件则返回一个空指针NULL。13.2.3getc()函数和putc()函数getc()ch=getc(fp)表示从fp指定的文件中获得一个字符;putc(参数1,参数2)putc(ch,fpout)表示将字符ch写入到FILE指针fpout指定的文件中13.2.42文件结尾从文件中读取数据的程序需要在到大文件的结尾时停止。到达文件结尾时,getc()函数会返回一个特殊值EOF13.2.5fclose()函数Fclose(fp)关闭由指针fp指定的文件,同时根据需要刷新缓冲区。13.2.6标准文件指针包含3个标准文件指针:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)13.3一个简单的文件压缩程序13.4文件I/O每个I/O函数都存在一个相似的文件I/O函数。文件I/O函数需要使用一个FILE指针来为这些函数指定要操作的文件。13.4.1fprintf()和fscanf()函数fprintf()和fscanf()fprintf/fscanf(参数1,参数2,参数3)参数1为FILE指针;例如fprintf(fp,“%s”,words)其中fp是FILE指针,words是数组名称;rewind(参数1)使程序回到文件开始处,参数1必须是一个文件指针;13.4.2fgets()和fputs()函数fgets(参数1,参数2,参数3)fgets(buf,max,fp)参数1:一个地址,用于存储输入值的地址参数2:一个整数,输入字符串的最大长度参数3:一个文件指针,这个指针指向要读取的文件返回值:返回传递给它的地址值,当遇到EOF时,返回NULLfgets()函数读取到它遇到的第1个换行字符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。然后fgets()向末尾添加一个空字符以构成一个字符串。如果fgets在达到字符最大数目之前读完一整行,它将在字符串的空字符前添加一个换行符以表示一行结束。Fputs(参数1,参数2)把字符串地址指针所指的字符串写入指定的文件。(与fgets相比,没有写入的长度,因为字符串包含结束符)参数1:一个地址,是要写入到文件的字符串的地址参数2:一个文件指针,指向要写入字符串的文件fgets保留了换行符,fputs不会添加换行符;13.5随机存取13.5.1fseek()和ftell()文件的定位函数fseek(参数1,参数2,参数3)参数1:一个文件指针,指向被搜索的文件参数2:一个long类型的值。表示从起始点开始的偏移量(偏移的字节数),正表示前移,负表示后移,0表示保持不动参数3:模式,决定偏移量的起始点,一般分为SEEK_SET、SEEK_CUR、SEEK_END返回值:正常则返回0,不正常则返回-1ftell(参数1)ftell函数为long型函数,返回文件的当前位置(1个long型数据)。通过返回距离文件起始处的字节数目来确定文件的位置。13.5.4fgetpos()和fsetpos()处理较大文件的定位函数。13.6标准I/O内幕执行一次fopen函数:打开一个文件建立一个(读写模式下两个)缓冲区创建一个数据结构(包含文件和缓冲区相关数据),包括以下内容错误指示器文件结尾指示器指向缓冲区起始处的指针文件标示符计数器:记录实际复制到缓冲区中的字节数返回一个指向该结构的指针13.7其他标准I/O函数13.7.4二进制I/O:fread()和fwrite()数据用二进制形式存入文件,没有数字形式到字符形式的转换。存入的数据更精确。13.8知识总结比较常用的共12个1)fopen(参数1,参数2)文件地址,模式2)fclose(参数1)文件指针3)getc(参数1)文件指针4)putc(参数1,参数2)写入文件的字符,文件指针5)fgets(参数1,参数2,参数3)存入字符串的地址,字符长度,文件指针6)fputs(参数1)文件指针7)fprintf(参数1,参数2,参数3)文件指针,输出格式,字符串地址8)fscanf(参数1,参数2,参数3)文件指针,输入格式,字符串地址9)fseek(参数1,参数2,参数3)文件指针,偏移量,起始点模式10)ftell(参数1)文件指针11)fread(参数1,参数2,参数3)12)fwrite(参数1,参数2,参数3)第14章结构和其他数据格式14.1实例问题:创建图书目录P37914.2建立结构声明Structbook{chartitle[41];charauthor[31];floatvalue;};structbooklibrary;把library定义为一个book结构设计的结构变量;其中struct是关键字,表示接下来是一个结构;Book:是一个可选的标记花括号内是结构成员列表;14.3定义结构变量结构有两个意思:一是结构设计,一是结构变量结构设计:告诉编译器如何表示数据,但并没让计算机为数据分配空间结构变量:编译器使用book模板为该变量分配空间;声明结构和定义结构变量的过程可以合并,如下:Struct{chartitle[41];charauthor[31];floatvalue;}library;但是如果要多次使用一个结构模板,就必须使用标记;14.3.1初始化结构使用一个用花括号括起来、逗号分隔的初始化项目列表进行初始化。如下Structbooklibrary{“CPrimer”,“StephenPrata”,60.00};14.3.2访问结构成员访问结构的成员:用结构成员运算符点(.)例gets(library.title)14.3.3结构的指定初始化项目指定初始化:用点运算符和成员名来表示具体的元素;例:structbookgift={.value=25.99,.author=“JamesBroadfool”,.title=“RuefortheToad”};1)可以按任何顺序指定初始化2)只初始化某个成员3)对特定的成员,最后一次赋值是它实际的值14.4结构数组14.4.1声明结构数组Structbooklibrary[10];Library本身不是结构名,它是元素类型为structbook结构的数组名。14.4.2表示结构数组的成员library[1].valuelibrary[2].title[5]第2个结构的title成员的第6个字符14.5嵌套结构结构的某一个或多个成员也是结构。访问嵌套结构的成员的方法:应用两次点运算符。#includestdio.h#defineLEN20constchar*msg[5]=//定义字符常量数组{Thankyouforthewonderfulevening,,Youcertainlyprovethata,isaspecailkindofguy.Wemustgettogether,overadelicious,andhaveafewlaughs};structnames{charfirst[LEN];charlast[LEN];};structguy{structnameshandle;charfavfood[LEN];charjob[LEN];floatincome;};intmain(void){structguyfellow={//初始化结构{Even,Villard},grilledsalmon,personalitycoach,58112.00};printf(Dear%s,\n\n,fellow.handle.first);printf(%s%s\n,msg[0],fellow.handle.first);//访问嵌套结构的成员printf(%s%s\n,msg[1],fellow.job);printf(%s\n,msg[2]);printf(%s%s%s\n,msg[3],fellow.favfood,msg[4]);printf(\n%40s%s\n,,Seeyousoon,);printf(%40s%s\n,,Shalala);return0;}14.6指向结构的指针14.6.1声明和初始化结构指针声明:structguy*him;意味着指针him现在可以指向任何现有的guy类型的结构。初始化:him=&fellow[0];14.6.2使用指针访问成员初始化后的him,有两种方式访问指针成员him-income;(*him).income二者完全相同14.7向函数传递结构信息函数与结构的传递包括3种方式:传递结构成员、传递结构地址、传递结构;14.7.1向函数传递结构成员14.7.2向函数传递结构地址#includestdio.h#defineFUNLEN50structfunds{charbank[FUNLEN];doublebankfund;charsave[FUNLEN];doublesavefund;};doublesum(conststructfunds*);//声明函数,其中参数为指向结构的指针intmain(void){structfundsstan={Garlic-MelonBank,3024.72,Lucky'sSavingsandLoan,9237.11};printf(Stanhasatotalof$%.2f.\n,sum(&stan));//结构的地址必须用&return0;}doublesum(conststructfunds*money){return(money-bankfund+money-savefund);//通过指针直接访问原结构stan}14.7.3向函数传递结构#includestdio.h#defineFUNLEN50structfunds{charbank[FUNLEN];doublebankfund;charsave[FUNLEN];doublesavefund;};d

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功