您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 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时,返回NULLfgets()函数读取到它遇到的第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
本文标题:cprimer学习笔记
链接地址:https://www.777doc.com/doc-2907072 .html