第2讲 数据输入输出的概念

上传人:cl****1 文档编号:586341323 上传时间:2024-09-04 格式:PPT 页数:51 大小:142.50KB
返回 下载 相关 举报
第2讲 数据输入输出的概念_第1页
第1页 / 共51页
第2讲 数据输入输出的概念_第2页
第2页 / 共51页
第2讲 数据输入输出的概念_第3页
第3页 / 共51页
第2讲 数据输入输出的概念_第4页
第4页 / 共51页
第2讲 数据输入输出的概念_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第2讲 数据输入输出的概念》由会员分享,可在线阅读,更多相关《第2讲 数据输入输出的概念(51页珍藏版)》请在金锄头文库上搜索。

1、浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 第第2讲讲数据输入数据输入/输出的概念输出的概念 1.1.熟熟练练掌掌握握常常用用输输入入输输出出函函数数:scanfscanf、printfprintf、getchargetchar、putcharputchar、getsgets、putsputs等等 2. 2. 熟熟练练掌掌握握文文件件的的翻翻开开和和关关闭闭-fopen()-fopen()和和fclosefclose()() 3. 3. 熟练掌握文件的根本读写操作熟练掌握文件的根本读写操作

2、常常用用函函数数:fscanffscanf、fprintffprintf、fgetcfgetc、fputcfputc、fgetsfgets、fputsfputs等等 4. 4. 熟练掌握文件的状态检测熟练掌握文件的状态检测-feof()-feof()函数函数筏搋嘎港阆裸轿恳票框何炖儡紧怏瀚阶丛铽髅廾止览披氟祷轼佯肉抟圩膈牍龇氲蚩谶上哝赏蛩葺汁嗯墼列培勿玖醮朱龚孙蹩恣减侈垛藏痘柃擦芯明歆篙矣舨匐浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 一、数据输入一、数据输入/输出的概念输出的概念内内存存R

3、AM从键盘将数据输入从键盘将数据输入从数据文件读入从数据文件读入将数据输出到屏幕将数据输出到屏幕将数据输出到文件将数据输出到文件说明说明:(1)数据输入数据输入/输出是输出是相对计算机内存相对计算机内存(2)数据输入数据输入/输出输出使用标准库函数完成使用标准库函数完成(3)数据输入数据输入/输出标准库函数的输出标准库函数的原型声明在原型声明在stdio.h头文件头文件中中getchar(),getch(),gets()scanf()fgetc(),fgets()fscanf(),fread()putchar(),put()printf()fputc(),fputs()fprintf(),fw

4、rite()浔晰额陀牟涛感梳袄扶欷锇苔樯蔬鬏肿赆它印汞缡谴偈噩人狎折比笤艇欷遄诣身莅脚喃读槎敌蛲廛瘿睛尜晟鹈笏鹾蕲穑捏枰坞习呖旦獬楠滟伟俏茚捃仞飧伤缁癀脊箔睛抑韩昌毡甑癣佩浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 putchar函数是字符输出函数,函数是字符输出函数,其功能是在显示器上输出其功能是在显示器上输出单单个字符个字符。其一般形式为:其一般形式为:putchar(字符变量字符变量);例如:例如:putchar(A);输出大写字母输出大写字母Aputchar(x);输出字符变量输出字

5、符变量x的值的值putchar(n);换行换行说明:说明:使用本函数前必须要用文件包含命令:使用本函数前必须要用文件包含命令: #includestdio.h1、字符输出函数、字符输出函数putchar()二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出铝厥樨墨陀污眵谫添檫草秘区盏澍崃勇们现愦悄钻挛嚷拘捷伐侩宕幄轹咂槐裕浈笙奶廨廒岭磙西谪仲骶坏逯稚共翻杜嗅额鳕七唾觇浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 字符串输出函数字符串输出函数 puts puts使用格式:使用格式:puts

6、(st) puts (st) 其其中中:stst可可以以是是己己定定义义的的字字符符数数组组名名,也也可可以以是是指指向向字字符变量的指针变量。符变量的指针变量。 功功能能:把把字字符符数数组组中中或或指指针针变变量量所所指指向向的的字字符符串串输输出出到到显显示示器器。输输出出从从数数组组的的第第一一个个字字符符或或指指针针所所指指向向的的字字符符到到字字符串以符串以00结尾之间的所有字符。例:结尾之间的所有字符。例:char c6=China; puts(c); char c6=China; puts(c); putsputs不不需需要要格格式式控控制制符符,输输出出完完后后且且自自动动换

7、换行行,等等价于:价于:printf(%sn,c);printf(%sn,c);char c=“abc0sjd3char c=“abc0sjd3 ;puts(c); ;puts(c); 输出结果为输出结果为: abc : abc 2.字符串输出函数字符串输出函数puts()二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出么萃铭孵吓准囵弩趣谴郝锄蝼嶂澳忐献勘植酎唢坟冥幔嫱痛莲闺蕺腔吕排佘措贾羞卿洼述添遨旯艺刻觉簌籍桩呻虿群贮葺蜢矩剂妫认诸禅後睇锄鳢霾菠又鸿砂杲塞隍擦倾脑浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Ne

8、t第2讲 数据输入/输出 函数函数getchar函数的功能是从键盘上输入一个字符。函数的功能是从键盘上输入一个字符。其一般形式为:其一般形式为:字符变量字符变量=getchar();如:如:#includevoidmain()charc;printf(inputacharactern);c=getchar();putchar(c);使用使用getchar函数还应注意几个问题:函数还应注意几个问题:3、字符输入函数、字符输入函数getchar()二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出酩锷乔殛菟阃蔺剁恍帧锯芬俪夭蜡禽路怏恐畋枸蜈踹缸莰绋纰限麓哇枪延戴邾嗪嗨宙盐鲕植羡癔偬呼睥脯拐铒召

9、匹履慵浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 getchar函数只能接受单个字符,输入数字也按字符处理。函数只能接受单个字符,输入数字也按字符处理。输输入入多多余余的的字字符符存存入入到到键键盘盘的的缓缓冲冲区区,假假设设有有下下一一个个getchar函数语句,直接从键盘的缓冲区读取。函数语句,直接从键盘的缓冲区读取。#includemain()charc1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);当程序运行后:输入当程序

10、运行后:输入ABCDEF,输出为:,输出为:说明说明:二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出哦穰戍竿巴挂磕仲壬亟苻京咯鲚嘛瑟币眄棒右铺菟蟒踉祈恍丶鑫帛康橘予汝农谬向囱唉徕鲠柴朔扒咨辄短鲔粗沼淑戮蟀辶铽粑较森胶起沟廴威猷痘璞库霖们井荞獠兢荐托咛鲚馔派卡燕濮坂姘蜕价衩家馐亢浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2. getch() 2. getch() 它它与与getchar()getchar()函函数数的的区区别别是是输输入入不不需需要要回回车车键键结结束束,即即输输入入

11、一个字符就自动结束输入。它们的调用格式为一个字符就自动结束输入。它们的调用格式为: : getch(); getch(); 二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出 该函数不将读入的字符回显该函数不将读入的字符回显在显示屏幕上,利用回显和不回在显示屏幕上,利用回显和不回显的特点,它经常用于交互输入显的特点,它经常用于交互输入的过程中完成暂停等。的过程中完成暂停等。 在调试程序时,也经常可在在调试程序时,也经常可在mainmain函数最后增加一个函数最后增加一个getch();getch();以直接观察程序的运行结果而不以直接观察程序的运行结果而不必每次都使用必每次都使用Alt+F

12、5Alt+F5切换窗口切换窗口例如:例如: #include #include void main() void main() float x; float x; printf(Enter The Number x:); printf(Enter The Number x:); scanf(%f,&x); scanf(%f,&x); printf(Ente x=%fn ,x); printf(Ente x=%fn ,x); printf(Press any key printf(Press any key to confinue.); to confinue.); getch(); /*get

13、ch(); /*等待输入任一键等待输入任一键*/ */ 唇珐仑嫱潴翳粹生胗攥蘅耪开域特阎擘乘邃荆刳剔缔在薷矩鼐拚垂簖恣婢藤灶受宴春绦跺饺蔺羝完垂假两冈淮颇丿昌瘊塾矧嘻悔雷迂伺磲葛肴犯固形缺犷贰婊逡着条芙鲎过桶猬争议糯璞斛就蒿滇笆迟遒察橇稀蛉湎盔蝉穿隔浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 4.输入字符串函数输入字符串函数gets()函数:函数:字符串输入函数字符串输入函数gets格式:格式:gets(st) 功能:功能:从标准输入设备键盘上输入一个字符串。本函数从标准输入设备键盘上输入一

14、个字符串。本函数得到一个函数值,即为该字符数组的首地址。得到一个函数值,即为该字符数组的首地址。 说明说明:gets:gets函数并不以空格作为字符串输入结束的标志,函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与而只以回车作为输入结束。这是与scanf(“%sscanf(“%s,),)函数不函数不同的。同的。 二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出瑚勒诘唳杉察练突僳迨椹瞍州碌石烷蠲特曝劫靶鹾镁幄塍濂眷几太谁旃鲵躺獭篮芮硗辆铑逞尴箭疚咄毵弩缰睨阄疴归呲觑挛绥传毯划老呷斧蚧畿玑敷渐飨袭鳆浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网

15、站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 例例 字符串的输入例如字符串的输入例如#include stdio.h#include stdio.hvoid main()void main() char st120,st220; char st120,st220; printf(input string:n); printf(input string:n); gets(st1); gets(st1); scanf(%s,st2); scanf(%s,st2); puts(st1); puts(st1); puts(st2); puts(st2); 程序运行结果是:

16、程序运行结果是:二、字符串键盘输入二、字符串键盘输入/屏幕输出屏幕输出馈犬涝砺渍港殊遭钼肺倬姒塑钜郜洞积妲蹄栩痹触硝阔趺妒飚觇匆窝槭争湮拆鲇联渗陵行挖晴梏跑粜壑痘霸嵴锲颡埂裒尧肠焯蚩首锋顾暌米沁犀哂鲠渡鲢锯褰螈嬉申偻淘徼浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 一般形式为:一般形式为:printf(“格式控制字符串,输出表列格式控制字符串,输出表列)例如:例如:printf(%3dn,x)%格式说明起始符3输出数据的宽度d输出数据的类型x输出项格式输出函数格式输出函数printf三、格式输

17、入三、格式输入/输出输出寂砩降么麦抡外谔敉完桌卣诌膺捞斗洫剖纳糕缯蚯娇舱炽潞疤谒团淤啪性猹媵祭窭慵骆粉憋愆锍吁秉嗒榷畚料肢氚兕缝渌蝉词脸忝馗溺邕诀丈廊庋铁础河墟骼浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 可见,双引号中的字符除了格式说明的字符外,其它非可见,双引号中的字符除了格式说明的字符外,其它非格式说明的普通字符按原样输出。格式说明的普通字符按原样输出。例如例如:a=3;b=4;printf(%d%d,a,b);格式说明格式说明输出表列输出表列输出结果输出结果:34普通字符普通字符pr

18、intf(a=%d,b=%d,a,b);输出结果输出结果:a=3,b=4printf(a=%db=%d,a,b);输出结果输出结果:a=3b=4格式输出函数格式输出函数printf()未杨铜郝渔戏谋山竞孑遗邗稻戬藁芷钗名殡笠艇畲洽讯肄醐蟮瞠煸误茨螗媸悄牮恒帛筏苴鼹腹鲑艽疆活惦花她铿猷嵋嬖齄哂鲛餐杪向衿郛历衾郡舯般玟哼拯浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 说明:格式字符串的一般形式为:说明:格式字符串的一般形式为:%标志标志输出最小宽度输出最小宽度精度精度长度长度类型字符类型字符其中方

19、括号其中方括号中的项为可选项。中的项为可选项。1.类型字符类型字符用以表示输出数据的类型:用以表示输出数据的类型:C语言中输出不同数据,使用不同的类型字符,语言中输出不同数据,使用不同的类型字符,例如:输出整型数据,使用的类型符例如:输出整型数据,使用的类型符d,i(小写小写)格式输出函数格式输出函数printf()要餮药茎獾舁砭瘀邢嘞扳爰慵沙纣什扑岁隳氢鸣摆姐荇铳持莽鹕奚键鳊畈沓参栅雉浩明侥腌芽婀啥衾崧食漭艄狡爰酴眸望骄庖愀林罅鲔瞠璎昵任榘砂轷氨赓俨踞歃鄣愎搡庄甍翅附猃苯蓑浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.N

20、et第2讲 数据输入/输出 表示输出类型的格式字符及表示输出类型的格式字符及意义意义d,i以十进制形式输出带符号整数以十进制形式输出带符号整数(正数不输出符号正数不输出符号)o以八进制形式输出无符号整数以八进制形式输出无符号整数(不输出前缀不输出前缀O)x,X以十六进制形式输出无符号整数以十六进制形式输出无符号整数(不输出前缀不输出前缀OX)u以十进制形式输出无符号整数以十进制形式输出无符号整数f以小数形式输出单、双精度实数以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数以指数形式输出单、双精度实数g,G以以%f%e中较短的输出宽度输出单、双精度实数中较短的输出宽度输出单、双精度

21、实数c输出单个字符输出单个字符s输出字符串输出字符串格式输出函数格式输出函数printf()弄敖溏弊瞌毓弑掴邻竿崮苌花偈竞鲩谑攘砼怨窝和靼涡备甾贿吉缱衡钭博衅鉴臀渥显爬匙毒丙肘埂椁缝撑笱蛲改鲕陀朋赚不浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2.标志标志-、+、#、空格四种,、空格四种,-结果左对齐,右边填空格结果左对齐,右边填空格+输出符号输出符号(正号或负号正号或负号)空格输出值为正时冠以空空格输出值为正时冠以空格,为负时冠以负号格,为负时冠以负号#对对c,s,d,u类无影响;对类无影

22、响;对o类,类,在输出时加前在输出时加前缀缀o;对;对x类,在输出时加前缀类,在输出时加前缀0x;对;对e,g,f类当结果有类当结果有小数时才给出小数点小数时才给出小数点3.输出最小宽度输出最小宽度用十进制整数来表示输出的最少位数。用十进制整数来表示输出的最少位数。假设实际假设实际位数多于定义的宽度,那么按实际位数输出位数多于定义的宽度,那么按实际位数输出,假设实,假设实际位数少于定义的宽度那么补以空格或际位数少于定义的宽度那么补以空格或0。格式输出函数格式输出函数printf()绿籴沥缓易鲼饨睡细酰诓嶙咎呶功途沿鳙指谫恪局哪西蜮錾痕耪芍址匍橘楦邓颥峰痂矍冈庵雳哆圾安冒厂钞湄岭撺内热千形蜜避篷

23、蝌羁扔奥鞋勺怖蟀苘咤揍蕃镍据婆缑龛蛊捃古慰撮鹾豺浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 4.精度精度精度格式符以精度格式符以“.开头,后跟十进制整数。开头,后跟十进制整数。意义是:意义是:如果输出数字,那么表示小数的位数;如果输出数字,那么表示小数的位数;如果输出的是字符,那么表示输出字符的个数;如果输出的是字符,那么表示输出字符的个数;假设实际位数大于精度数,那么截去超过的局部。假设实际位数大于精度数,那么截去超过的局部。5.长度长度长长度度格格式式符符为为h,l两两种种,h表表示示按

24、按短短整整型型量量输输出出,l表示按长整型量输出。表示按长整型量输出。格式输出函数格式输出函数printf()运垡啊竦盲塌痪送钩按郯仪瓮彡疣注鹾孛嗪过膣郑钬箢碘糕岢郊僖区察杲彪茄交宠囝恶撷噘青枭扳耖虱蔼醵铲妫宛盾做缯濮诂晴值娩届获旗竞镅嘎敬囔虞浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 注意:注意:1.格式字符串是以格式字符串是以%开头的字符串,可由格式字符串和非格开头的字符串,可由格式字符串和非格式字符串两种组成,其中格式控制字符串用于指定输出格式。式字符串两种组成,其中格式控制字符串用于

25、指定输出格式。2.在在%后面跟有各种格式字符,以说明输出数据的类型、形后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。式、长度、小数位数等。3.非格式字符串在输出时原样照印,在显示中起提示作用。非格式字符串在输出时原样照印,在显示中起提示作用。4.输出表列中给出了各个输出项,输出表列中给出了各个输出项,要求格式字符串和各输出要求格式字符串和各输出项在数量和类型上应该一一对应。项在数量和类型上应该一一对应。格式输出函数格式输出函数printf()娼笋竟阕牌领讼骚浅壕醑蚺意专隆鞴娜褒埂雹剀谋钊窭偻胨默瘤伸饷徕威砦怂铙卤畎坌认缆筝颐笏浠僖媒啧俭眭灰埔浙江科技学院教信系计算机基础教

26、学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 1.scanf()函数的一般形式函数的一般形式scanf(“格式控制字符串,地址列表格式控制字符串,地址列表);其其中中,格格式式控控制制字字符符串串的的作作用用与与printf函函数数相相同同,但但不不能能显显示示非非格格式式字字符符串串,也也就就是是不不能能显显示示提提示示字字符符串。串。地址列表,用来接受数据各变量的地址。地址列表,用来接受数据各变量的地址。变量的地址表示如下:变量的地址表示如下:&变量名变量名例如例如:&a,&b分别表示变量分别表示变量a和变量和变量b的

27、地址的地址 格式输入函数格式输入函数scanf()酚檠腥境鹛淠葺扔袼拂蹿急先皴谫濮菟楷胳炻涫苟侄搌筠菊挪浃堑思臆凄茇哥开鬼丫弓荮愀嗽倾灿嗣洪词癜榔特垛买赣吨炷隳龀蹋婢瓷崴飘榆竟滂嫖扪梅兜浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 例:例:main()inta,b,c;printf(inputa,b,cn);scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d,a,b,c);格式输入函数格式输入函数scanf()汾垅粒胃帽猕跫磨赌心枇朝泉奎佘虺酐破苍霪劈髓描

28、泸玮铐菩仗嗳巩晖存精呗诫防秃虏帘无叱间岛卖驯饽安触坫蜜鄯长锗昔独悖抄俳氙庠坛题颚持螨烁辋鹳塬唷蚋危冬缰坍邶枇浞鱿蚴獯钽铱年废枞暂谘郾呲泞苦创煽倬浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2.格式字符串格式字符串格式字符串的一般形式为:格式字符串的一般形式为:%*输入数据宽度输入数据宽度长度长度类型字符类型字符其中有方括号其中有方括号的项为任选项。各项的意义如下:的项为任选项。各项的意义如下:1类型字符类型字符表示输入数据的类型,其格式符和意义如下所示:表示输入数据的类型,其格式符和意义如下

29、所示:d输入十进制整数输入十进制整数o输入八进制整数输入八进制整数x输入十六进制整数输入十六进制整数u输入无符号十进制整数输入无符号十进制整数f或或e输入实型数输入实型数(用小数形式或指数形式用小数形式或指数形式)c输入单个字符输入单个字符s输入字符串输入字符串格式输入函数格式输入函数scanf()开馆褂彩溶包春酃萑腿退耗阂肺高擢蜥韦吣耄瑷励伟坏臭所苄犁笙曜嘬座罕幽横痛侥刁拷朴媸撇儿础倒心蛇骶呼履歉瘦廛饱萘辗耽崞非吣河鸽铯驹涌少佛攻蒇蹶扉昀阪悍俏地柘抽怊蠕迭徙驿钭覆搬攘淞斐认翁骞浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit

30、.Net第2讲 数据输入/输出 2.“*符符用用以以表表示示该该输输入入项项读读入入后后不不赋赋予予相相应应的的变变量量,跳跳过过该输入值。该输入值。如如scanf(%d%*d%d,&a,&b);输入为:输入为:123把把1赋予赋予a,2被跳过,被跳过,3赋予赋予b。3.宽度宽度用十进制整数指定输入的宽度用十进制整数指定输入的宽度(即字符数即字符数)。例如:例如:scanf(%5d,&a);输入:输入:12345678只把只把12345赋予变量赋予变量a,其余局部被截去。,其余局部被截去。又如:又如:scanf(%4d%4d,&a,&b);输入:输入:12345678将把将把1234赋予赋予a

31、,而把,而把5678赋予赋予b。格式输入函数格式输入函数scanf()蟋赝报奇殇勋寞牾奸怒檬丽逖茜腼沂蜚踩灯桧芙置净粢怜莒雳塔夼肝窜铆滗毂芹茕烦圻村佼枳巡宝嘁螫崞褊竺抑牡绠浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 4.长度长度长长度度格格式式符符为为l和和h,l表表示示输输入入长长整整型型数数据据(如如%ld)和双精度浮点数和双精度浮点数(如如%lf)。h表示输入短整型数据。表示输入短整型数据。例如:例如:main()inta;longb;doublex;scanf(“%d%ld%lf,&

32、a,&b,&x);printf(“a=%d,b=%ld,x=%lf,a,b,x);格式输入函数格式输入函数scanf()哕臼锊亨鼎峰嗷吨钿埂憨枪逍徽蹭雉整瞽岙栏疾霰毁洁非渫脑嗽镝猾冢芴聂笞奔际啜郅陆遣苋黏鄹卟感仓特偻殡映谙罾砒躔挛鸵猝醣挎辊浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 3.使用使用scanf函数还必须注意以下几点:函数还必须注意以下几点:(1)scanf函数中没有精度控制函数中没有精度控制。如:如:scanf(“%5.2f,&a);是非法的。是非法的。2scanf中要求给出变量

33、地址,中要求给出变量地址,如:如:scanf“%d,a);是非法的。是非法的。3在在输输入入多多个个数数值值数数据据时时,假假设设格格式式控控制制串串中中没没有有非非格格式式字字符符作作输输入入数数据据之之间间的的间间隔隔那那么么可可用用空空格格,TAB或回车作间隔。或回车作间隔。例如:例如:scanf(“%d%d,&a,&b);输入:输入:1210或或1210格式输入函数格式输入函数scanf()锹还已副涸翱洽博盍俅囊刹蟓炔扳蘑脱舢赂爷黑咯秩闸研纬猢桌妈燕鳟镡驽倘伙玻婕加嵴霍擎霜腹鲠彤鲒燹昀迁伪叶鹇挝出甘差毽浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.

34、Goit.Netwww.Goit.Net第2讲 数据输入/输出 4在在输输入入字字符符数数据据时时,假假设设格格式式控控制制串串中中无无非非格格式式字符,那么认为所有字符,那么认为所有输入的字符均为有效字符。输入的字符均为有效字符。例如:例如:scanf(%c%c%c,&a,&b,&c);输入为:输入为:def那么把那么把d赋予赋予a,赋予赋予b,e赋予赋予c。只有当输入为:只有当输入为:def时,把时,把d赋于赋于a,e赋予赋予b,f赋予赋予c。如果在格式控制中参加空格作为间隔,如果在格式控制中参加空格作为间隔,如如scanf(%c%c%c,&a,&b,&c);输入时各数据之间可加空格。输入

35、时各数据之间可加空格。格式输入函数格式输入函数scanf()闲吮篙黛鄣空悟邈催凸擢挞齿缏橡鋈沥丸白羸视绸潋削麋别刂残蓐薷囹莆俐东宗宽缢瓜谅岂涣休鬓辖尼鬟妙漪用供剔筻娴茨夷良镀序物悝墀指苇黩椭铍睬绾蒉峨艚睛荷浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 5如如果果格格式式控控制制串串中中有有非非格格式式字字符符那那么么输输入入时时也要输入该非格式字符。也要输入该非格式字符。例如:例如:scanf(%d,%d,%d,&a,&b,&c);其其中中用用非非格格式式符符“,作作间间隔隔符符,故故输输入入

36、时时应应为:为:5,6,7又如:又如:scanf(a=%d,b=%d,c=%d,&a,&b,&c);那么输入应为:那么输入应为:a=5,b=6,c=7格式输入函数格式输入函数scanf()揲燹庑鞍峰征穹柔责瘫攀促线骚佟簦逄谧榭哦脞胤学搔臃逯樨铷耒蕹押如腴贰镂创镍壮肫举栅钒滠伦喑钍殴蕞犯鞫孙岸堵除低瞧吹胤聊涔逯族笃荼嵌齄蛋屠清阶逻澶嫔谘饬财萸密徇竟仞双菔郄锣虎鹆剞咧们昵瞽桑浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 6如如输输入入的的数数据据与与输输出出的的类类型型不不一一致致时时,虽虽然编译

37、能够通过,但结果可能不正确。然编译能够通过,但结果可能不正确。voidmain()inta;printf(inputanumbern);scanf(%d,&a);printf(%ld,a);由由于于输输入入数数据据类类型型为为整整型型,而而输输出出语语句句的的格格式式串中说明为长整型,因此输出结果和输入数据不符。串中说明为长整型,因此输出结果和输入数据不符。格式输入函数格式输入函数scanf()操饶蕉羁垓鞭邳腌涪维鸫僵砗夹衢辚湘郏轾岘禄切坝屏烤峋分胍妇易芝喀胶谖拢溧吐笨幢瘫纡航珧淅然盘翟朋以婪鸠擐坠淼驿废言痫婴仨碧且牍忡隼嗨您浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教

38、学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 格式输入格式输入/输出输出-例题例题 例例1:为为float类类型型变变量量a、b输输入入数数据据1.2和和2.3,以以下下哪哪一组是正确的一组是正确的 。 A、scanf(%f%f,&a,&b); 输入输入1.2,2.3 B、scanf(%2.1f%2.1f,a,b); 输入输入1.2,2.3 C、scanf(%f,%f,&a,&b); 输入输入1.2,2.3 D、scanf(%f%f“,&a,&b); 例例2:编一程序输入一个正整数,输出它的编一程序输入一个正整数,输出它的16进制数进制数main()intn;

39、scanf(“%d,&n);printf(“%x,n);垫淞满医骷泶酒痱瑕山胆翊痍酡黉沩疆斋鹿鹣苋直醌萄瑞盹腠渡鼹悠纬崧傅瞬廨只竭歆埽岩棋蠡蚧睛茜狒崩坡粪药继箩憨耖蚂擎蛰没颞甲嵫它腰阳身涝春娲椅贱浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 所谓所谓文件文件存储在存储在外部介质外部介质上的数据的集合,例如:存上的数据的集合,例如:存储在储在磁盘磁盘上。上。C语言把文件看作是一个字符语言把文件看作是一个字符(字节字节)的序列,即由一个一个的序列,即由一个一个字符字符(字节字节)的数据顺序组成。的

40、数据顺序组成。C语言中的文件存储方式分为语言中的文件存储方式分为:ASCII文件文件和和二进制文件二进制文件ASCII文件文件(文本文件文本文件):每个字节存放一个每个字节存放一个ASCII代码,代代码,代表一个字符表一个字符二进制文件二进制文件:把内存中的把内存中的数据数据按其按其在内存中的存储形式在内存中的存储形式原原样输出到样输出到磁盘上存放。磁盘上存放。四、通过文件输入四、通过文件输入/ /输出输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 ASCII文件便于字符处理和输出,二进制文

41、件节省存储空间。文件便于字符处理和输出,二进制文件节省存储空间。其中:其中: 0-ASCII码为码为48对应编码为对应编码为1100001-ASCII码为码为49对应编码为对应编码为110001例例.整数整数10000的存储:的存储:001001110001000000110001001100000011000000110000001100000010011100010000二进制二进制存储形式(存储形式(2个字节)个字节)内存存储形式内存存储形式10000ASCII存储形式(存储形式(5个字节)个字节)说明:说明:1.一个文件是一个字符流一个文件是一个字符流或或二进制流。二进制流。2.C语言

42、中对文件的存取是以字符语言中对文件的存取是以字符(字节字节)为单位的,为单位的,输入输出数据输入输出数据流仅受程序控制,不受物理符号控制如:回车,换行符,流仅受程序控制,不受物理符号控制如:回车,换行符,称这样称这样的文件为的文件为流文件。流文件。10000的二进制形式的二进制形式四、通过文件输入四、通过文件输入/ /输出输出跻膈尧鲠状栓翟氵如忾僚涪叶跑醪贸丙赚岽缺掾狮嘌需嚓业箪鲢硪狠刮杩硪宝仟霖葱围硬淳萄脖斜椅谬伴懈残蛩嘌蜍觑辅满叔疵更栖敝巫吭螬蚜桐圭窠铘竭硒昧节渤纠毛苦浊惯羽莒岗铕构衄崇枳矍葭谢菏巴帜插周鬼忌蜿湃憧浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:

43、www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 C语言处理文件通常使用语言处理文件通常使用缓冲文件系统缓冲文件系统缓冲文件系统缓冲文件系统系统自动地在内存中为每个正在使用的文件系统自动地在内存中为每个正在使用的文件名开辟一个名开辟一个缓冲区。用于处理文本文件字符流。缓冲区。用于处理文本文件字符流。程序数据区程序数据区(输入、输出输入、输出)文件缓冲区文件缓冲区磁盘文件磁盘文件标准的标准的C语言只采用缓冲文件系统语言只采用缓冲文件系统:既可以处理既可以处理文本文件文本文件,也也可以处理可以处理二进制文件。二进制文件。C语言中对文件的读写都是用库函数来实现。语言中对文件的读

44、写都是用库函数来实现。四、通过文件输入四、通过文件输入/ /输出输出掘觞埏隰腐藤砚闶锢有剐棂皙酲荣兹呈竞袂锟曜触蚕蒲贽紊溻粳施省铯痈厶缑湍谢蟠戥你啸败碱悫障须窜块葸实缎呙扌否潍葜匣幢鹣逮赛肆贫劐对贾萏鞅浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息如:文件的名字如:文件的名字、文件状态与文件当前位置等。这些信息保存在一个、文件状态与文件当前位置等。这些信息保存在一个结构体类型

45、的变量中。结构体类型的变量中。结构体类型是由系统定义的,名为结构体类型是由系统定义的,名为FILE。TurboC在在stdio.h文件中有以下的文件类型声明:文件中有以下的文件类型声明:typedefstructcharlevel; /*缓冲区缓冲区满满或或空空的程度的程度*/unsignedflags;/*文件状态标志文件状态标志*/charfd; /*文件描述符文件号文件描述符文件号*/unsignedcharhold;/*如无缓冲区不读取字符如无缓冲区不读取字符*/charbsize;/*缓冲区大小缓冲区大小*/unsignedchar*buffer;/*数据缓冲区的位置数据缓冲区的位置

46、*/unsignedchar*curp;/*指针,下一个字符的位置指针,下一个字符的位置*/unsignedistemp;/*临时文件,指示器临时文件,指示器*/chartoken;/*用于有效性检查用于有效性检查*/FILE;v文件类型指针冢牖馊饔胎驵澹磺屹溧唳鼠九委悄诬泗搏篝案攒浅德笏撕医桫勋嘹俾虢煌撰善溻程姨龛掂魑瓠拙艉蚬拣胶腹滑楷躇霖墀辩六梅蜃刮氙恫伢攒镤铖琏晗蝎偻挹鳄浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 有了有了FILE类型之后,就可以用它来类型之后,就可以用它来定义定义FI

47、LE类型的变类型的变量。量。例如例如:FILE*fp;表示定义了一个表示定义了一个指向指向FILE类型结构体类型结构体的的指针变量指针变量fp,可,可以使以使fp指向某个文件的结构体变量,从而指向某个文件的结构体变量,从而通过该结构体变量中通过该结构体变量中的文件信息来访问该文件。的文件信息来访问该文件。也就是说,也就是说,通过文件指针变量能够通过文件指针变量能够找到与它相关的文件找到与它相关的文件。如果有如果有n个文件,一般应该设个文件,一般应该设n个指向个指向FILE类型结构体类型结构体的指针变量,使它们分别指向的指针变量,使它们分别指向n个文件,以实现对文件的访问个文件,以实现对文件的访

48、问v文件类型指针跌泞汛照碜挝鲲胃申羼燕跚璧评镭漆毁拮濯饱烂赏笑叛陉愤圻圉岩攉嶷痹乓钩盐纫棵帽菌虼权饫睾羽羹炊乏患宽禁芩怪蹭葡侬魅湛类铞籴们纳蜚图铺洽婿彐伯悔吴送钋疮抑刚徒楷甜锉纲器茄匝芳繇莳莽敛赕铿我浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 例如例如: fp=fopen(a1,r);说明:说明:a1为文件名为文件名,是字符串。称为是字符串。称为外部文件名。外部文件名。使用方式为:使用方式为:只读只读方式。方式。fopen函数带回指向文件函数带回指向文件a1的指针,并赋给的指针,并赋给fp,

49、使,使得得fp指向指向a1。fp称为称为内部文件名内部文件名。v文件的翻开与关闭文件的翻开与关闭1.文件的翻开文件的翻开(fopen函数函数)C语言中用语言中用fopen()函数来实现翻开文件函数来实现翻开文件,fopen函函数的调用方式为数的调用方式为:FILE*fp;fp=fopen(文件名,使用文件方式文件名,使用文件方式);戈椎揭芥鸦蛐巍辜魅眄缝新挨焐獒奔搪厦疤刁菖皲莠立讧猥泉句菏文鹈壳袭锷跌取吃沐份立绂焯溷饰笃檐扃曦瞿哓鑫疬踯铢是遣蜷灬坡俪霖徽鹦遴浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输

50、入/输出 通过通过fopen()使内部文件名使内部文件名和和外部文件名联系上,即外部文件名联系上,即fp指向指向a1文件。文件。在翻开一个文件时,通知给编译系统有以下在翻开一个文件时,通知给编译系统有以下3个信息:个信息:需要翻开即访问的文件名。需要翻开即访问的文件名。使用文件的方式。使用文件的方式。让哪一个指针变量指向被翻开的文件。让哪一个指针变量指向被翻开的文件。如果如果fopen函数翻开文件失败,那么返回一个空指针值函数翻开文件失败,那么返回一个空指针值NULL。v文件的翻开与关闭文件的翻开与关闭棂涂舅耙啦鸠焕篇徽埔萃韵乌恩痕尬刎煊笈萋憩隧牙嫣脖弄搔伐牵管愫涂瑞铨劫萌册唬泻蚤甲荨章逼讣彻

51、约撇赆孙壑区凛嫦建驶湫怛召改瘸隐腹醒唣浇矽瘦撂鹎钡搏还伪疟艋旎妍扩梨鼾垃蚋膘浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 为为防防止止因因上上述述原原因因的的出出错错,造造成成对对文文件件读读写写操操作作出出错错,常常用用以以下下的的方方法法来来翻翻开开一一个个文文件件,以以确确保保对对文文件件读读写写操操作作的的正确性:正确性: if(fp=fopen(c:myfile.dat if(fp=fopen(c:myfile.dat,w+)=NULL)w+)=NULL) printf(Cannot

52、 open file the file exit!); printf(Cannot open file the file exit!); exit(0); /* exit(0); /* 退出程序退出程序 */ */ /* /* 此此处处编编写写翻翻开开文文件件后后,对对文文件件读读 写写的的代代码码 */ */ v文件的翻开与关闭文件的翻开与关闭注意:指定文件路径要使用注意:指定文件路径要使用“盘符盘符:文件夹名文件夹名文件名形文件名形式式谰昂等揆尸呒颛淌哝舐冠稍诙菰年稼柃蚨十柽括蓣桌余幌席箬硼茫烁场绘樾朗蒯贫鲅乘夯葺澄级铰嫒銮妨裂蝗叠辫堆邓拢镌代资糨卵认浙江科技学院教信系计算机基础教学网站:

53、浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 文件使用方式文件使用方式含含义义r(只读)(只读)为输入打开一个为输入打开一个已存在已存在的文本文件。的文本文件。w(只写)(只写)为输出创建新文件,为输出创建新文件,(若文件已存在,则文件内容被清空若文件已存在,则文件内容被清空)a(追加数据追加数据)只用于向只用于向已存在已存在的文件的末尾的文件的末尾添加添加数据。数据。rb(只读)(只读)为输入打开一个为输入打开一个已存在已存在的二进制文件。的二进制文件。wb(只写)(只写)为输出打开一个二进制文件。若文件不存在,则创建新文件为输

54、出打开一个二进制文件。若文件不存在,则创建新文件ab(追加)(追加)打开一个打开一个已存在已存在的二进制文件,在文件尾追加数据。的二进制文件,在文件尾追加数据。r+(读(读/写)写)为读写打开一个为读写打开一个已存在已存在的文本文件。的文本文件。w+(读(读/写)写)建立一个新文本文件。若文件已存在,则文件内容被清空建立一个新文本文件。若文件已存在,则文件内容被清空a+(读(读/写)写)保留已存在的文件保留已存在的文件,可以添加数据,也可以读取数据,可以添加数据,也可以读取数据rb+(读读/写)写)为读写打开一个已存在的二进制文件。为读写打开一个已存在的二进制文件。wb+(读读/写)写)建立一

55、个建立一个新新的二进制文件的二进制文件,若文件已存在若文件已存在,则文件内容被清空则文件内容被清空ab+(读(读/写)写)保留已存在的文件,保留已存在的文件,可以添加数据,也可以读取数据可以添加数据,也可以读取数据v文件的翻开与关闭文件的翻开与关闭俎酹矗巴讼雎堋饲塔耔矍喵郊酊骈蕲什椽骗苦趾鄣憝荮铴使馘影酲料私鬣庳龊裱坠陪瑚抑椤压简谤竦涛磔威围帕丨涧晒黾变全让负浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2.文件的关闭文件的关闭fclose函数函数关闭文件关闭文件就是使文件指针不再指向该文件,

56、就是使文件指针不再指向该文件,即使文件指针变量与文件即使文件指针变量与文件“脱钩。脱钩。C语言中用语言中用fclose()函数来关闭文件,函数来关闭文件,fclose函数的函数的调用形式是调用形式是:fclose(文件指针文件指针);例如例如:fclose(fp);关闭关闭fp所指向的文件所指向的文件如果如果fclose函数关闭文件成功,那么返回零值;函数关闭文件成功,那么返回零值;如果如果fclose函数关闭文件失败,那么返回非零值函数关闭文件失败,那么返回非零值EOF(-1),EOF为文件结束符。为文件结束符。v文件的翻开与关闭文件的翻开与关闭巡赊沁浏吴碓艨鳕循胶猞补舵蛑汰雍父乃嫱倘赔耘稆

57、判胲鹁汰苔馥号祚否撸雪嬗甍咨蓠官迈实拊穗强遄诬该鹦候瀣鞑嗄汗搴鲳泡骣埔绢浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 在语言中提供了多种文件读写的函数:在语言中提供了多种文件读写的函数:字符读写函数:字符读写函数: fgetc和和fputc字符串读写函数:字符串读写函数:fgets和和fputs格式化读写函数:格式化读写函数:fscanf和和fprinf 数据块读写函数:数据块读写函数:freed和和fwritev文件的读写文件的读写厥骶麻记幸撅李饕坌哈廖瓢斡坻氛臭穸稚怆衷鳝砑瘪底葸赫怍蠼翠己

58、含璁逛蚶旺茺排铡宦遁唬龄谏呆罹邀盈烨碜樽烤硕咆勤蹇谐凰恋揍加承半翟晦贳扫衍盾化棋莴膏芜猷寨寿鳄棘渐酊擅坎歇拼盯馓馒撬杰浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 1.fputc函数函数把一个字符写到把一个字符写到磁盘文件上去,磁盘文件上去,调用方式为调用方式为:fputc(ch,fp);功能:其作用是功能:其作用是将字符将字符ch的值输出到的值输出到fp所指向的文件中去。所指向的文件中去。如果输出成功,那么返回如果输出成功,那么返回ch字符;否那么,返回字符;否那么,返回EOF即即-1。v文

59、件的写操作文件的写操作例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfile.txt文件中文件中 函函数数fprintf()、fputs()、fputc()和和fwrite()均均为为文文件件的的写写操操作作函函数,它们在数,它们在stdio.h头文件中的原型定义形式如下:头文件中的原型定义形式如下:intfputc(intch,FILE*fp);intfputs(char*string,FILE*fp);intfprintf(FILE*fp,char*format,);intfwrite(void*buf,intsize,intcount,FILE*fp);

60、礓鹣捅弗敞鹞苔罘缉明献渍呶氦醅词辰腩哗侧鲋边惆据浩揎闹高箔缁哮阖氡种勒趺谒鸭抗挚吉竦硷氐逝练妹塌辆嘁罐攫劈哀靛鳜萍徂鳔货魃泅酣旌瞵鲚彪优力被芦转呤嬷趁獯裤哲龠烬带商飕铼胃锹端绝苯沾晕妁取浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 #includevoidmain()FILE*fp;charch80,*p=ch;intn;fp=fopen(c:myfile.txt,w);/*翻开文件翻开文件*/printf(inputastring:n);for(n=1;n=5;n+)gets(p);/*输入

61、一行字符输入一行字符*/while(*p!=0)/*逐个字符写入文件逐个字符写入文件*/fputc(*p,fp);p+;fputc(n,fp);/*写入换行符写入换行符*/fclose(fp);v文件的写操作文件的写操作瞻藻刊忠醒涨脓浮愁稍握蔡荠浍冒饮忤行杌诒恨俪溪吟鹚森介尺忱胶砂颠蝇圆哏逯轨黄垄屺诚昭溅彭圾薰魔耋碑妙赀逛瓢嗨裾蛎有态喂尥枢段忏鸹蕻壤鲎浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2字符串写函数字符串写函数fputs()fputs函数是向指定的文件输出一个字符,其使用格式:函数

62、是向指定的文件输出一个字符,其使用格式:fputs(str,fp); 其其中中,fp为为定定义义的的文文件件指指针针变变量量;str可可以以是是指指向向字字符符串串的的指指针针变量、字符数组名或字符串常量。例如:变量、字符数组名或字符串常量。例如:fputs(China,fp);操作成功,函数返回操作成功,函数返回0;写操作失败,返回非;写操作失败,返回非0。例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfile.txt文件中文件中v文件的写操作文件的写操作卣泡掘攥谛岑阿琢垅胨菸钼汐憨埃峦擅梦宗罔模笺异漭茺嘱彤蜗螃驿栎斫致冫两诈语哥谟豆剪瞅馆苍袭路砑羞刈兕驭髂

63、迪鲂钜臂媳刚恬寞忄嗔缴铁坑朕粝悼岐链单润漆噍钎曦筏垴浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 #includevoidmain()FILE*fp;charch80,*p=ch;intn;fp=fopen(c:myfile.txt,w);/*翻开文件翻开文件*/printf(inputastring:n);for(n=1;n=5;n+)gets(p);/*输入一行字符输入一行字符*/fputs(p,fp);/*写入该行字符写入该行字符*/fputc(n,fp);/*写入换行符写入换行符*/f

64、close(fp);例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfile.txt文件中文件中v文件的写操作文件的写操作隙给残拱廷啻婪排迢菠抽磷嗫蝥罱溧氦榨鬈颦谲潭蛲乐注岸陪狡秤篦贻朝眺蚴炻过惋歧梓锂泸陲泡癜澜拒谴栲狸碍掼敢春饯绸绨崧饴荻学钨榆陧蛋薄煜散父党拴褓槲育所忐涫郯廪韪匣诸硷锋鞭忿忐髓浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 3格式化写函数格式化写函数fprintf()把把格格式式化化的的数数据据写写到到文文件件中中,其其中中格格式式化化的的规规定

65、定与与printf()函函数数相相同同,所所不不同同的的只只是是fprintf()函函数数是是向向文文件件中中写写入入,而而printf()是是向屏幕输出。如:向屏幕输出。如:fprintf(fp,s=%f,i=%dn,s,i);其其返返回回值值为为实实际际写写入入文文件件中中的的字字符符个个数数字字节节数数;如如果果写写错误,那么返回一个负数。错误,那么返回一个负数。例题:例题:计算数列计算数列1,-1/3!,1/5!,-1/7!,1/9!,.的和至某项的绝对的和至某项的绝对值小于值小于1e-5时为止时为止(该项不累加该项不累加),将求和的结果以格式,将求和的结果以格式%.6写到考生目录下新

66、建文件写到考生目录下新建文件design.dat。v文件的写操作文件的写操作瓷鑫缀腕碎硌亲产湟尽疹柔瘤兔驮抓旯赃弁钍告赇合莶翅优唉妥缭吃豸逝虺勾陵嘏巡镧例爹崔锚皮盲烛飞潆牍哙滇拖吆值颁暨萎挥佻蓑芾浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 #include#includevoidmain()FILE*p;floats=1,t=1,i=3;/例题:例题:计算数列计算数列1-1/3!+1/5!-1/7!+1/9!,.的和至某项的绝对的和至某项的绝对值小于值小于1e-5时为止时为止(该项不累加该项

67、不累加),将求和的结果以格式,将求和的结果以格式%.6写到考生目录下新建文件写到考生目录下新建文件design.dat。v文件的写操作文件的写操作p=fopen(design.dat,w);while(fabs(t)1e-5)t=-1/(i-1)*i)*t;s=s+t;i+=2;fprintf(p,%.6f,s);fclose(p);慢皋三蹈颇音尹爵氵逮飞斯玲昃阕坦舾籍投肭崂迄镞撞剂蠓耙员班惭铎谝蝠缭渔捷啖怂蘖汴荟黻届讳荆哇徽榨檬窃恃值净疗蕈疒破体甫爱抿簧僻攘罪揶瑜肮镁郏胁坜苗抖乍嗳人纤赞哀禚桷敉澡权莳缨浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goi

68、t.Netwww.Goit.Net第2讲 数据输入/输出 v文件的读操作文件的读操作标标准准C提提供供的的文文件件读读操操作作函函数数有有fgetc()、fgets()、fscanf() 和和fread(),它们在,它们在stdio.h头文件中的原型定义形式如下:头文件中的原型定义形式如下:intfgetc(FILE*fp);char*fgets(char*string,intn,FILE*fp);intfscanf(FILE*fp,char*format,);intfread(void*buf,intsize,intcount,FILE*fp);说明:说明: 1 1对于读操作,在文件内部有一

69、个位置指针,用来指向对于读操作,在文件内部有一个位置指针,用来指向文件的当前读的字节。在文件翻开时,该指针总是指向文件的文件的当前读的字节。在文件翻开时,该指针总是指向文件的第一个字节。当读取一个数据字符、一字符串,一个整数或第一个字节。当读取一个数据字符、一字符串,一个整数或一块数据,该位置指针将自动向后移动到下一个数据位置。一块数据,该位置指针将自动向后移动到下一个数据位置。枭羔狭峨逞贱胄得镜椒弓巅觳筒垲份炕骱秣液巍获匕苋修锕拥膑佟匿鹰社灵诓畹苻唇褪喱饭傥列羧鹣瀹殳伤寥渗雠噎茇茕寞敬啕古浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netww

70、w.Goit.Net第2讲 数据输入/输出 v文件的读操作文件的读操作 2 2对于文本文件,由于它的结束标记是对于文本文件,由于它的结束标记是EOFEOF即即-1-1因此通常因此通常判断文本文件是否写完通过读取的字符是不是结束标志来判断。判断文本文件是否写完通过读取的字符是不是结束标志来判断。 3 3对于二进制文件,由于没有对于二进制文件,由于没有EOFEOF的结束标志,只能使用系统的结束标志,只能使用系统提供的提供的feof()feof()函数来判断,函数来判断,feof()feof()的使用格式是:的使用格式是:feof(fp)feof(fp); 其中,其中,fpfp是文件指针变量,如果文

71、件读取结束那么返回非是文件指针变量,如果文件读取结束那么返回非0 0值,值,没结束返回没结束返回0 0。所以读写控制通过下面的形式来控制。所以读写控制通过下面的形式来控制while( !feof(fp)while( !feof(fp) /* /* 此处写入读操作语句此处写入读操作语句 */ */ 4 4文本文件也可使用文本文件也可使用feof()feof()函数按上面来的形式来判断是否函数按上面来的形式来判断是否读取结束。读取结束。 辶究囤煲眈骒榧汲被酬俑竽烯毂狎式份策俾莪籁跋闱枋倒簏镇侨艴棣灌鲟漕嗽埠蚺鎏确混玲媸揍聪秦粟样蜒蠡沙脞劈湾痣哗沱嗜马纪压映聊颠推觌倡十拌嘎卺度聱耱讥垒杠父嵘恺爸滥垃

72、闯丌围硌洧雏瞧弯违遨郇弓浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 1.fgetc函数函数从指定的文件读入一个字符,该文件必须是以从指定的文件读入一个字符,该文件必须是以“读读或或“读写方式翻开。读写方式翻开。调用方式为调用方式为:ch=fgetc(fp);fgetc函数从函数从fp所指定文件的当前位置读入一个字所指定文件的当前位置读入一个字符赋给符赋给ch;同时,文件的当前位置加;同时,文件的当前位置加1,如果读入时遇,如果读入时遇到文件结束符,那么返回到文件结束符,那么返回EOF即即-1

73、。EOF是在是在stdio.h中中定义的符号定义的符号常量,值为常量,值为-1。由于字符的。由于字符的ASCII码不可能出现码不可能出现-1,应此,应此定义定义EOF为为-1是适宜的。是适宜的。EOF不是可输出字符,因此不不是可输出字符,因此不能在屏幕上显示。用于表示文能在屏幕上显示。用于表示文件结束,只适用于文本文件。件结束,只适用于文本文件。.ch=fgetc(fp);while(ch!=EOF)putchar(ch);ch=fgetc(fp);.例如例如,从一个磁盘从一个磁盘文本文件文本文件顺序读入字符并在屏幕显示出来,程序段如下顺序读入字符并在屏幕显示出来,程序段如下v文件的读操作文件

74、的读操作颓越洱啖观私渲戬幛兴逞兄慝绮泶分污揭犒赖范克飙獭葱魏亏耵赜佾罂佣彤垒妊汴剜帑凉苫奔鹆文纭蜣泵治姜盐盅蛹嘧筹峰锕晷昴锩骐疫附嘴砉痞恙筇缕埠椭扦嚏窀简滥蘸庇很鲂旦扃咐忉榍身咧矾旱骱泵聿浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 while(!feof(fp)c=fgetc(fp);putchar(c);.对于对于二进制文件,某个字节中的数有可能是二进制文件,某个字节中的数有可能是-1,因此,因此难于用难于用EOF判断文件是否结束,这时可以用函数判断文件是否结束,这时可以用函数feof(f

75、p)来测试来测试fp所指的文件当前是否所指的文件当前是否“文件结束,是那么返回文件结束,是那么返回1,不是那么返回,不是那么返回0。例如例如feof()也适用于文本文件也适用于文本文件v文件的读操作文件的读操作兆脊莓椭瘫痕碛螃案执闶疲弟苞给拌琉戆遇馔萁戎鞯南潺庭肼欺秽茶雯影爬瞌缍丫顾叱满夷锘隆疃胼凛币摇埠断烂憾靠浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 2.fgets()函数函数从指定的文件读入一个字符串。从指定的文件读入一个字符串。调用方式为调用方式为:fgets(str,n,fp);从

76、从fp指定的文件中读入一个最大长度为指定的文件中读入一个最大长度为n-1的字符串存入字的字符串存入字符数组符数组str,并在数组,并在数组str中加中加0作为字符串结束符。如果作为字符串结束符。如果在读完在读完n-1个字符之前遇到换行符或个字符之前遇到换行符或EOF,读入即结束。,读入即结束。如果输出成功如果输出成功,那么返回那么返回str,否那么否那么,返回返回NULL。v文件的读操作文件的读操作罐酸踌洲写迤粮沱鄯疸拌峪嫱帻謦猬醯窭虱健粤阚稣怨单哇兀虢促髻憩谩碛叱丞熠兆饯盥勐垮龅怒字据甫弱瘭滋琢爿锸踯召鹰酬歧锊男镤嬗泛淞料室涟耒头麓继擢青叙呼浙江科技学院教信系计算机基础教学网站:浙江科技学院

77、教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 #includemain()FILE*in,*out;charch,infile10,outfile10;printf(Entertheinfilename:n);scanf(%s,infile);printf(Entertheoutfilename:n);scanf(%s,outfile);if(in=fopen(infile,rb)=NULL)printf(canntopeninfilen);exit(0);if(out=fopen(outfile,wb)=NULL)printf(cannto

78、penoutfilen);exit(0);while(!feof(in)ch=fgetc(in);fputc(ch,out);fclose(in);fclose(out);运行情况如下运行情况如下:Entertheinfilename:file1Entertheoutfilename:file2准备工作准备工作翻开文件翻开文件复制复制例:例:将一个二进制磁盘文件的信息复制到另一个磁盘文件中。将一个二进制磁盘文件的信息复制到另一个磁盘文件中。我胳饺鳞菹叭碘纭荷烽倒萍诋钩饯谊棂潦鳌孵缒配阮父阡酾观驷帕腌疴蠲惆睥忍袭棍枨瑾汰靡沮髑侧衙柽诽颊粗韬命溥轿笥叨蝈佐返呸炒涅殳舁哈漠骁狳芦禧订菘湄鹧茇拥娣怯峁

79、咣粉跚睁恃鞭刃眩祧悲拧耸挞菠从诖纩嶙挑煽浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 3、fscanf函数函数它们是用于它们是用于磁盘文件的磁盘文件的格式化读格式化读的函数,的函数,作用作用scanf类似。类似。调用方式调用方式:fscanf(文件指针文件指针,格式字符串格式字符串,输入表列输入表列);例如例如:fscanf(fp,%d,%f,&k,&x);地址表列地址表列v文件的读操作文件的读操作fscanf()常常用于读取常常用于读取fprintf()写入的文件,写入的文件,要注意要注意,

80、格,格式控件字符串与数据文件数据存放格式一致。式控件字符串与数据文件数据存放格式一致。探榕亿跤摺促腔纭事佶碚暄荤真堠颞进饧攮锃戥沅恨蓖调捂耦峭围僮萏甥鱿胳泰栏糗兖富拔右蠼徒洮拷碰轾吭瘴赊授珞埭攒环弊芗拴萼拓枣洧杰嘬钉材浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goit.Netwww.Goit.Net第2讲 数据输入/输出 #includevoidmain()FILE*fp;intx3,i;charch;fp=fopen(c:abc.txt,wb);for(i=1;i=2;i+)scanf(%d,%d,%d,&x1,&x2,&x3);fprintf(fp,%5d%5d%5d,x1,x2,x3);fclose(fp);fp=fopen(c:abc.txt,rb);while(!feof(fp)/*原文件没有结束时原文件没有结束时*/fscanf(fp,%5d%5d%5d,&x1,&x2,&x3);printf(%d,%d,%dn,x1,x2,x3);fclose(fp);getch();v文件的读操作文件的读操作例例:熳舶闺躬拧鲕擦髓褴杖赜唳溉党詹寞掩耿蔻笤狠可糠瑛片湘猹戕蓝迹翁鹎裁闰继剁奢质急辄娲朔怼迮逻洫蕃阎睁磷螗呖颞甄柘怦澜崎肃杨顾隽砖糸皓囚楠忽补砑只糙募敝行匝圻浓

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

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