C语言教学课件:第六部分 输入输出与格式控制

举报
资源描述
1第六部分第六部分 输入输出与格式控制输入输出与格式控制基本输入输出基本输入输出(Input/Output)I/O通过标准库进行通过标准库进行常用函数常用函数scanfprintfgetcharputchar需要需要#include3何谓文件?n文件,file,(档案)n文件是一个具有符号的一组相关联元素的有序序列。n文件可以包含范围非常广泛的内容。n系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件。n例子n信件,书籍,人事档案,公文,字画,名单,生意来往清单,商品目录,n电脑中的文件:数字化后的文件4人与文件n传统的制作文件的方法n用笔在纸上写文字信息,形成一份文件,保存起来n如n画家画一幅画,书法家写一幅字,普通人写信,做作业,n人阅读文件的方法n用眼睛看,逐个顺序看,或跳着看n计算机具有强大的文件处理能力n比人强大吗?n我们的程序能否处理文件?如何处理?有没有一些标准的文件?文件概念文件概念n内存的特性:内存的特性:n关机后存储其中的数据立刻消失关机后存储其中的数据立刻消失n为为“持续持续”保存数据,必须借助外存,磁盘、磁带等保存数据,必须借助外存,磁盘、磁带等n语言需提供访问和使用外存的能力,文件是外存数据语言需提供访问和使用外存的能力,文件是外存数据组织的基本单元。组织的基本单元。C文件概述文件概述n文件文件n文件是系统存储数据的基本方法文件是系统存储数据的基本方法n文件是数据的集合文件是数据的集合n文件的基本属性文件的基本属性n名称属性名称属性n空间属性,如大小,占用空间空间属性,如大小,占用空间n位置位置n类型类型n读写属性读写属性n时间:创建、修改、访问时间时间:创建、修改、访问时间n其它属性其它属性71.标准输入输出文件n标准输入和输出文件是C程序中默认的基本文件,这两个文件在程序开始运行时被自动打开,在程序结束时被自动关闭。默认情况下n标准输入文件对应于用户终端设备的键盘n标准输出文件对应于字符终端设备的显示器。n在C程序中,标准输入文件与任何其他输入文件一样,是一个可以从中按顺序连续读出字节流的数据来源。n标准输入文件:人写,机器读n标准输出文件也与其他输出文件一样,是一个可以向其按顺序连续写入字节流的数据容器。n标准输出文件:机器写,人读标准输入与输出文件示意8键盘:以文件的形式给键盘:以文件的形式给电脑看,提供输入。电脑看,提供输入。电脑可以看的纸。电脑可以看的纸。显示器:被电脑当显示器:被电脑当成书写和展示设备,成书写和展示设备,以文件的形式出现。以文件的形式出现。电脑可以写的纸电脑可以写的纸人写电脑看人写电脑看电脑写人看电脑写人看getchar 无参函数,从无参函数,从标准输入(键盘)标准输入(键盘)读一个字符,返回读一个字符,返回字符的编码值。字符的编码值。getchar的类型特征:的类型特征:int getchar(void)典型使用(输入的字符赋给变量典型使用(输入的字符赋给变量c):):c=getchar();没有输入数据时没有输入数据时getchar等待,直到人输入字符等待,直到人输入字符(并换行)。(并换行)。2.2.字符字符I/OI/O函数函数getchargetchar和和putcharputchar注意getchar的返回值类型是int例:写程序把由输入的一个字符输出并换行:例:写程序把由输入的一个字符输出并换行:#include int main()int c;/*char c*/c=getchar();putchar(c);putchar(n);return 0;putchar 把一字符送到标准输出:把一字符送到标准输出:putchar(O);putchar(K);两字符送到标准输出,使字符显示在屏幕上两字符送到标准输出,使字符显示在屏幕上。输入一系列字符输入一系列字符假设假设要由标准输入得到的多个字符送到标准输出,需要由标准输入得到的多个字符送到标准输出,需要反复读入要反复读入/输出字符,如何处理?输出字符,如何处理?while(.)c=getchar();putchar(c);怎样描述循环条件?怎样描述循环条件?首先要问的是:希望在什么条件下结束循环?首先要问的是:希望在什么条件下结束循环?1)程序内部确定程序内部确定,与实际输入无关。例如用计数器,与实际输入无关。例如用计数器,读入若干个字符后结束。读入若干个字符后结束。#include int main()/*读读10个字符,输出各个字符的编码个字符,输出各个字符的编码*/int c,n;for(n=0;n 10;+n)c=getchar();printf(%dn,c);return 0;两种可能:两种可能:2)根据实际输入决定根据实际输入决定。循环条件与输入有关,得。循环条件与输入有关,得到满足条件的输入时结束循环。到满足条件的输入时结束循环。例:输入读一行,输出各字符的编码:例:输入读一行,输出各字符的编码:#include int main()int c;while(1)/*循环执行多少次由输入行包含多少字符确定循环执行多少次由输入行包含多少字符确定*/c=getchar();if(c=n)break;printf(%d,c);return 0;也可要求遇到其他字符结束。何时结束是也可要求遇到其他字符结束。何时结束是一种约定一种约定。处理任意的输入字符处理任意的输入字符标准库定义了标准库定义了符号常量符号常量EOF(End Of File/文件结束)。文件结束)。getchar遇文件结束返回遇文件结束返回EOF。q由键盘输入文件结束:用由键盘输入文件结束:用Ctrl-Z送文件结束信息。送文件结束信息。q如果标准输入定向到文件,如果标准输入定向到文件,getchar就会从文件读,就会从文件读,文件读完时返回值文件读完时返回值EOF。EOF是什么?是什么?一一般般系系统统定定义义为为-1(具具体体值值并并不不重重要要)。程程序序里里只只需需判判断输入函数的断输入函数的返回值返回值是否与是否与EOF值相同。值相同。while(c=getchar()!=EOF)./*对输入的实际处理对输入的实际处理*/注意注意:赋值操作有:赋值操作有值值,注意加括号。,注意加括号。pEOF的值不能与任何字符编码相同。的值不能与任何字符编码相同。pgetchar返回返回intp若若getchar返回给返回给char变量,可能无法给出变量,可能无法给出EOF值。值。如果用如果用char变量,值超出变量,值超出char范围时结果无定义范围时结果无定义char ch;/*EOF=-1*/while(ch=getchar()!=EOF).16总结n正常情况下getchar返回读入的字符,遇文件结束返回EOF值,End of file。n应该用int变量接收getchar的返回值,以保证正确判断输入结束。n如果用char变量,值超出char范围时结果无定义nchar ch;nwhile(ch=getchar()!=EOF).例:统计(由标准输入得到的)文件中的字符个数。例:统计(由标准输入得到的)文件中的字符个数。#include int main()int c;long n=0;while(c=getchar()!=EOF)n+;printf(%ldn,n);return 0;n标准输入默认连接到键盘。标准输入默认连接到键盘。n程序执行到程序执行到getchar等待输入,等待输入,得到输入后得到输入后处理。处理。n用用Ctrl-Z发信息可使循环结束。发信息可使循环结束。18从普通文件中读入n设源程序是count.c,编译结果是count.exe。n用命令行方式启动程序,将标准输入定向到文件(设被统计文件是abcd.txt):ncount abcd.txtn读入循环中可以完成对输入内容的各种处理,例如:n统计某个字符出现的次数,n统计文件中的行数等等n操作系统OS允许标准输入重新定向。将标准输入定向到文件可使文件成为getchar或scanf的输入源。n程序里不必区分实际输入来自键盘还是实际文件。处理连续输入时,这两者没有本质差别。19重定向标准输出文件输出数据重定向标准输入文件输入数据重定向变换输入数据来源或输出数据的去向203.标准I/O的行式输入输出n对标准输入/输出流也有行式I/O函数,原型:nchar*gets(char*s)nint puts(const char*s)ngets读一行到s,用0代行尾n并返回s。s应是字符数组。出错或遇文件结束返回NULLnputs将字符串s以及一个换行符输出。正常完成返回非负值,出错返回EOFn用gets时应注意数组越界(无法限制写入长度),应选用足够大的数组21一般用法n一般使用形式:nchar s256;n.nif(gets(s)!=NULL).n.nif(puts(s)!=EOF).n应检查和处理操作未正常完成的情况。ngets函数无长度控制,成为许多系统的安全漏洞。n建议用fgets(buf,len,stdin)或者scanf(格式串里写%ns,其中的n为长度限制)代替gets224.scanfnscanf从标准输入读数据,根据格式描述将实际输入转换到指定类型,转换结果赋给指定变量:nscanf(格式描述串,&变量名,.)n格式描述串与printf的类似,其中的转换描述(以%开头)说明输入形式和转换方式。n其他参数(个数应与格式串中转换描述一致)指明接受输入的程序变量。形式是在变量名前面加&符号。n注意n必须写&符号,不写将引起严重问题n为什么?23输入格式控制nscanf的原型:nint scanf(const char*format,.);nscanf将输入流看成空白字符分隔的字段,读入过程就是对这些字段的顺序处理nformat指挥scanf进行转换,成功转换得到的值赋给对应变量(地址来自参数)nscanf处理完格式串或遇转换失败时结束,返回所完成的转换项数24format里各种字符的意义n空白字符(空格/制表符)n要求scanf跳过输入中遇到的空白字符(空格、换行符、制表符)n普通字符n非转换描述的非空白字符。要求scanf将它与输入流下一个非空白字符匹配,字符相同时匹配成功,否则转换失败n转换描述n一个转换描述刻画对流中下一字段的转换方式。以字符%开始,到转换字符结束25转换描述n转换描述,%之后可以有n*表示只匹配不赋值;n长度描述(整数)指定输入字符个数;n赋值目标长度指示h、l或L;最后是转换字符。n转换顺利完成时结果赋给参数所指变量(无*时)。n若有长度描述就以指定个数的字符为字段。有星号(如%*s、%*6d等)时所匹配的东西不赋值,直接丢掉。26简单示例#include int main()int i,n=0;printf(Please input a number:);scanf(%d,&n);printf(%d%dn,n,n*n);return 0;从用户在键盘输入的字符流的当前位置之后尝试读一个十进数给出n的地址,告诉scanf函数,将读到数据看成是十进制数,转换后放入给定地址:&n27转换字符的意义n转换字符的意义,所要求实际输入,对应参数类型:nd 十进制形式的整数。(int*)ni 整数,可为十、八或十六进制表示。(int*)no 八进制整数,可无先导字符0。(int*)nu 无符号十进制整数。(unsigned*)nx 十六进制整数,可无先导0 x或0X。(int*)nc 字符,指定输入宽度可输入多字符到字符数组。不跳过空白,读入多字符后不加0。(char*)ns非空白字符序列,可有长度限制。在字符数组最后附加0(做成字符串)。(char*)28转换字符的含义n转换字符的含义ne,f,g符合C语言规定形式的浮点数。(float*)np 指针值,形式与printf(“%p”)输出一致。用于把由printf输出的指针值读回。(void*)nn 向对应参数中写入本次函数调用执行到此已读的字符个数。不实际读入也不计转换项数
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号