浙江科技学院教信系计算机基础教学网站wwwGoitNet_第1页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第2页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第3页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第4页
浙江科技学院教信系计算机基础教学网站wwwGoitNet_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、 常用函数:常用函数:fscanffscanf、fprintffprintf、fgetcfgetc、fputcfputc、fgetsfgets、fputsfputs等等 4.4. 熟练掌握文件的状态检测熟练掌握文件的状态检测-feoffeof()()函数函数浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 一、数据输入一、数据输入/输出的概念输出的概念内内存存RAM从键盘将数据输入从键盘将数据输入从数据文件读入从数据文件读入将数据输出到屏幕将数据输出到屏幕将数据输出到文件将数据输出到文件说明说明:

3、 (1) 数据输入数据输入/输出是输出是相对计算机内存相对计算机内存 (2) 数据输入数据输入/输出输出使用标准库函数完成使用标准库函数完成 (3) 数据输入数据输入/输出标准库函数的输出标准库函数的原型声明在原型声明在stdio.h头文件头文件中中getchar(),getch(),gets()scanf()fgetc(), fgets()fscanf(), fread()putchar(), put()printf()fputc(), fputs()fprintf(), fwrite()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Go

4、it.Net.Net第2讲 数据输入/输出 putchar 函数是字符输出函数,函数是字符输出函数, 其功能是在显示器上输出其功能是在显示器上输出单个字符单个字符。 其一般形式为:其一般形式为: putchar(字符变量字符变量); 例如:例如: putchar(A); 输出大写字母输出大写字母A putchar(x); 输出字符变量输出字符变量x的值的值 putchar(n); 换行换行 说明:说明:使用本函数前必须要用文件包含命令:使用本函数前必须要用文件包含命令: #include stdio.h1、字符输出函数、字符输出函数putchar()二、字符(串)键盘输入二、字符(串)键盘输入

5、/屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 字符串输出函数字符串输出函数 puts使用格式:使用格式:puts (st) 其中其中:st可以是己定义的字符数组名,也可以是指向字符可以是己定义的字符数组名,也可以是指向字符变量的指针变量。变量的指针变量。 功能:功能:把字符数组中或指针变量所指向的字符串输出到把字符数组中或指针变量所指向的字符串输出到显示器。输出从数组的第一个字符或指针所指向的字符到字显示器。输出从数组的第一个字符或指针所指向的字符到字符串(以符串(以 0结尾

6、)之间的所有字符。例:结尾)之间的所有字符。例:char c6=China; puts(c); puts不需要格式控制符,输出完后且自动换行,等价于:不需要格式控制符,输出完后且自动换行,等价于:printf(%sn,c);char c=“abc0sjd3” ;puts(c); 输出结果为输出结果为: abc 2. 字符串输出函数字符串输出函数puts() 二、字符(串)键盘输入二、字符(串)键盘输入/屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 函数函数getchar函数的功

7、能是从键盘上输入一个字符。函数的功能是从键盘上输入一个字符。 其一般形式为:其一般形式为:字符变量字符变量=getchar(); 如:如: #include void main() char c; printf(input a charactern); c=getchar(); putchar(c); 使用使用getchar函数还应注意几个问题:函数还应注意几个问题: 3、字符输入函数、字符输入函数getchar( )二、字符(串)键盘输入二、字符(串)键盘输入/屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net

8、.Net第2讲 数据输入/输出 getchar函数只能接受单个字符函数只能接受单个字符,输入数字也按字符处理。,输入数字也按字符处理。 输入多余的字符存入到键盘的缓冲区,若有下一个输入多余的字符存入到键盘的缓冲区,若有下一个getchar函数语句,直接从键盘的缓冲区读取。函数语句,直接从键盘的缓冲区读取。 #include main() char c1,c2; c1=getchar(); c2= getchar(); putchar(c1);putchar(c2); 当程序运行后:输入当程序运行后:输入ABCDEF ,输出为:,输出为: 说明说明:二、字符(串)键盘输入二、字符(串)键盘输入/

9、屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2. 2. getchgetch() () 它与它与getchargetchar()()函数的区别是输入不需要回车键结束,即输入函数的区别是输入不需要回车键结束,即输入一个字符就自动结束输入。它们的调用格式为一个字符就自动结束输入。它们的调用格式为: : getch(); getch(); 二、字符(串)键盘输入二、字符(串)键盘输入/屏幕输出屏幕输出 该函数不将读入的字符回显该函数不将读入的字符回显在显示屏幕上,利用回显和不回在显

10、示屏幕上,利用回显和不回显的特点,它经常用于交互输入显的特点,它经常用于交互输入的过程中完成暂停等。的过程中完成暂停等。 在调试程序时,也经常可在在调试程序时,也经常可在mainmain函数最后增加一个函数最后增加一个getchgetch();();以直接观察程序的运行结果而不以直接观察程序的运行结果而不必每次都使用必每次都使用Alt+F5Alt+F5切换窗口切换窗口例如:例如: # #includestdioinclude .h void main() void main() float x; float x; printf(Enter The Number x:); printf(Ente

11、r The Number x:); scanf scanf(%f,&x);(%f,&x); printf(Ente printf(Ente x=%fn ,x); x=%fn ,x); printf printf(Press any key (Press any key to confinue.); to confinue.); getchgetch(); /(); /* *等待输入任一键等待输入任一键* */ / 浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 4. 输入字符串函数输入字符串函数

12、gets()函数:函数: 字符串输入函数字符串输入函数gets 格式:格式: gets (st) 功能:功能:从标准输入设备键盘上输入一个字符串。本函数从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。得到一个函数值,即为该字符数组的首地址。 说明说明: :gets函数并不以空格作为字符串输入结束的标志,而函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与只以回车作为输入结束。这是与scanf(“%s”,)函数不同的。函数不同的。 二、字符(串)键盘输入二、字符(串)键盘输入/屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院

13、教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 例例 字符串的输入示例字符串的输入示例#include stdio.hvoid main() char st120,st220; printf(input string:n); gets(st1); scanf(%s,st2); puts(st1); puts(st2); 程序运行结果是:程序运行结果是:二、字符(串)键盘输入二、字符(串)键盘输入/屏幕输出屏幕输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数

14、据输入/输出 一般形式为:一般形式为: printf(“格式控制字符串格式控制字符串”,输出表列,输出表列) 例如:例如:printf(%3dn,x)%格式说明起始符3输出数据的宽度d输出数据的类型x输出项格式输出函数格式输出函数printf()()三、格式输入三、格式输入/输出输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 可见,双引号中的字符除了格式说明的字符外,其它非可见,双引号中的字符除了格式说明的字符外,其它非格式说明的普通字符按原样输出。格式说明的普通字符按原样输出。例如例如:a

15、=3;b=4;printf(%d %d, a , b); 格式说明格式说明输出表列输出表列输出结果输出结果: 3 4 普通字符普通字符printf(a=%d , b=%d,a , b);输出结果输出结果: a=3 , b=4 printf(a=%d b=%d,a ,b);输出输出结果结果 : a=3 b=4格式输出函数格式输出函数printf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 说明:格式字符串的一般形式为:说明:格式字符串的一般形式为: % 标志标志输出最小宽度输出最小宽度精度精

16、度长度长度类型字符类型字符 其中方括号其中方括号中的项为可选项。中的项为可选项。 1. 类型字符类型字符 用以表示输出数据的类型:用以表示输出数据的类型: C语言中输出不同数据,使用不同的类型字符,语言中输出不同数据,使用不同的类型字符,例如:输出整型数据,使用的类型符例如:输出整型数据,使用的类型符 d,i (小写小写)格式输出函数格式输出函数printf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 表示输出类型的格式字符及表示输出类型的格式字符及 意义意义 d, i 以十进制形式输出带

17、符号整数以十进制形式输出带符号整数(正数不输出符号正数不输出符号) o 以八进制形式输出无符号整数以八进制形式输出无符号整数(不输出前缀不输出前缀O) x, X 以十六进制形式输出无符号整数以十六进制形式输出无符号整数(不输出前缀不输出前缀OX) u 以十进制形式输出无符号整数以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数以小数形式输出单、双精度实数 e ,E 以指数形式输出单、双精度实数以指数形式输出单、双精度实数 g ,G 以以%f%e中较短的输出宽度输出单、双精度实数中较短的输出宽度输出单、双精度实数 c 输出单个字符输出单个字符 s 输出字符串输出字符串格式输出函数格式输

18、出函数printf( )浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2.标志标志 -、+、#、空格四种,、空格四种, - 结果左对齐,右边填空格结果左对齐,右边填空格 + 输出符号输出符号(正号或负号正号或负号)空格输出值为正时冠以空空格输出值为正时冠以空 格,为负格,为负时冠以负号时冠以负号 # 对对c,s,d,u类无影响;对类无影响;对o类,类, 在输出时加前缀在输出时加前缀o;对;对x类,在输出时加前缀类,在输出时加前缀0 x;对;对e,g,f 类当结果有小数时才给出小数类当结果有小数

19、时才给出小数点点3.输出最小宽度输出最小宽度 用十进制整数来表示输出的最少位数。用十进制整数来表示输出的最少位数。 若实际位数多于定若实际位数多于定义的宽度,则按实际位数输出义的宽度,则按实际位数输出 ,若实际位数少于定义的宽度则若实际位数少于定义的宽度则补以空格或补以空格或0。格式输出函数格式输出函数printf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 4. 精度精度 精度格式符以精度格式符以“.”开头,后跟十进制整数。开头,后跟十进制整数。 意义是:意义是: 如果输出数字,则表示小

20、数的位数;如果输出数字,则表示小数的位数; 如果输出的是字符,则表示输出字符的个数;如果输出的是字符,则表示输出字符的个数; 若实际位数大于精度数,则截去超过的部分。若实际位数大于精度数,则截去超过的部分。5. 长度长度 长度格式符为长度格式符为h,l两种,两种,h表示按短整型量输出,表示按短整型量输出,l表示按长表示按长整型整型量输出。量输出。 格式输出函数格式输出函数printf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 注意:注意: 1. 格式字符串是以格式字符串是以%开头的字符串

21、,可由格式字符串和非格开头的字符串,可由格式字符串和非格式字符串两种组成,其中格式控制字符串用于指定输出格式。式字符串两种组成,其中格式控制字符串用于指定输出格式。 2. 在在%后面跟有各种格式字符,以说明输出数据的类型、形后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。式、长度、小数位数等。 3. 非格式字符串在输出时原样照印,在显示中起提示作用。非格式字符串在输出时原样照印,在显示中起提示作用。 4. 输出表列中给出了各个输出项,输出表列中给出了各个输出项, 要求格式字符串和各输出要求格式字符串和各输出项在数量和类型上应该一一对应。项在数量和类型上应该一一对应。格式输出

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

23、如下: & 变量名变量名 例如例如: &a,&b分别表示变量分别表示变量a和变量和变量b 的地址的地址 格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 例:例:main() int a,b,c; printf(input a,b,cn); scanf(%d%d%d,&a,&b,&c); printf(a=%d,b=%d,c=%d,a,b,c); 格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:

24、www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2. 格式字符串格式字符串 格式字符串的一般形式为:格式字符串的一般形式为: %*输入数据宽度输入数据宽度长度长度类型字符类型字符 其中有方括号其中有方括号的项为任选项。各项的意义如下:的项为任选项。各项的意义如下:(1) 类型字符类型字符 表示输入数据的类型,其格式符和意义如下所示:表示输入数据的类型,其格式符和意义如下所示: d 输入十进制整数输入十进制整数 o 输入八进制整数输入八进制整数 x 输入十六进制整数输入十六进制整数 u 输入无符号十进制整数输入无符号十进制整数 f或或e 输入实型数输入实型数(用小数形式或

25、指数形式用小数形式或指数形式) c 输入单个字符输入单个字符 s 输入字符串输入字符串格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2. “*”符符 用以表示该输入项读入后不赋予相应的变量,跳过该输入值。用以表示该输入项读入后不赋予相应的变量,跳过该输入值。 如如 scanf(%d %*d %d,&a,&b); 输入为:输入为:1 2 3 把把1赋予赋予a,2被跳过,被跳过,3赋予赋予b。3.宽度宽度 用十进制整数指定输入的宽度用十进制整数指定输入的宽度(

26、即字符数即字符数)。 例如:例如: scanf(%5d,&a); 输入:输入: 12345678 只把只把12345赋予变量赋予变量a,其余部分被截去。,其余部分被截去。 又如:又如: scanf(%4d%4d,&a,&b);输入:输入:12345678将把将把1234赋予赋予a,而把,而把5678赋予赋予b。格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 4.长度长度 长度格式符为长度格式符为l和和h,l表示输入表示输入长整型数据长整型数据(如如%ld)

27、和和双精双精度浮点数度浮点数(如如%lf)。h表示输入短整型数据。表示输入短整型数据。 例如:例如: main() int a; long b; double x; scanf(“%d%ld%lf”,&a,&b,&x); printf(“a=%d, b= %ld,x=%lf”,a,b,x); 格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 3. 使用使用scanf函数还必须注意以下几点:函数还必须注意以下几点: (1) scanf函数中没有精度控制函数中没有

28、精度控制 。 如:如:scanf(“%5.2f”,&a); 是非法的。是非法的。 (2) scanf中要求给出变量地址,中要求给出变量地址, 如:如: scanf(“%d”,a);是非法的。是非法的。 (3) 在输入多个数值数据时,若格式控制串中没有非格式在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。或回车作间隔。 例如:例如:scanf(“%d%d”,&a,&b); 输入:输入: 12 10 或或 12 10格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系

29、计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 (4)在输入字符数据时,若格式控制串中无非格式字在输入字符数据时,若格式控制串中无非格式字符,则认为所有符,则认为所有 输入的字符均为有效字符。输入的字符均为有效字符。例如:例如: scanf(%c%c%c,&a,&b,&c);输入为:输入为:d e f 则把则把d赋予赋予a, 赋予赋予b,e 赋予赋予c。 只有当输入为:只有当输入为: def 时,把时,把d赋于赋于a,e赋予赋予b,f赋予赋予c。 如果在格式控制中如果在格式控制中加入空格作为间隔,加入空格作为间隔, 如如 scanf (%c %c %

30、c,&a,&b,&c); 输入时各数据之间可加空格。输入时各数据之间可加空格。 格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 (5)如果格式控制串中有非格式字符则输入时也如果格式控制串中有非格式字符则输入时也要输入该非格式字符。要输入该非格式字符。 例如:例如: scanf(%d,%d,%d,&a,&b,&c); 其中用非格式符其中用非格式符“ , ”作间隔符,作间隔符,故输入时应为:故输入时应为: 5,6,7 又如:又如: scanf(a=%d,b=%d

31、,c=%d,&a,&b,&c);则输入应为:则输入应为: a=5,b=6,c=7 格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 (6)如输入的数据与输出的类型不一致时,虽如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果可能不正确。然编译能够通过,但结果可能不正确。void main() int a; printf(input a numbern); scanf(%d,&a); printf(%ld,a); 由于输入数据类型为整型,由于输入数据类型

32、为整型, 而输出语句的格式而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。串中说明为长整型,因此输出结果和输入数据不符。格式输入函数格式输入函数scanf()浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.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,

33、b); 输入输入1.2,2.3 C、scanf(%f,%f,&a,&b); 输入输入1.2,2.3 D、scanf(%f%f“,&a,&b); 输入输入1.22.3例例2: 编一程序输入一个正整数,输出它的编一程序输入一个正整数,输出它的16进制数进制数main() int n; scanf(“%d”,&n); printf(“%x”,n); 浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 所谓所谓文件文件 存储在存储在外部介质外部介质上的数据的集合,例如:存上的数据的集合,例如:存储在储在磁盘

34、磁盘上。上。 C语言把文件看作是一个字符语言把文件看作是一个字符(字节字节)的序列,即由一个一个的序列,即由一个一个字符字符(字节字节)的数据顺序组成。的数据顺序组成。 C语言中的文件存储方式分为语言中的文件存储方式分为 :ASCII文件文件 和和 二进制文件二进制文件 ASCII文件文件(文本文件文本文件) : 每个字节存放一个每个字节存放一个ASCII代码,代代码,代表一个字符表一个字符 二进制文件二进制文件 : 把内存中的把内存中的数据数据按其按其在内存中的存储形式在内存中的存储形式原原样输出到样输出到 磁盘上存放。磁盘上存放。四、通过文件输入四、通过文件输入/ /输出输出浙江科技学院教

35、信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 ASCII文件便于字符处理和输出,二进制文件节省存储空间。文件便于字符处理和输出,二进制文件节省存储空间。其中:其中: 0 -ASCII码为码为 48(对应编码为(对应编码为110000) 1 -ASCII码为码为 49 (对应编码为(对应编码为110001)例例. 整数整数 10000 的存储:的存储:00100111 0001000000110001 00110000 00110000 00110000 0011000000100111 00010000二进

36、制二进制 存储形式(存储形式(2个字节)个字节)内存存储形式内存存储形式1 0 0 0 0ASCII 存储形式(存储形式(5个字节)个字节)说明:说明: 1. 一个文件是一个一个文件是一个字符流字符流 或或 二进制流。二进制流。 2. C 语言中对文件的存取是语言中对文件的存取是以字符以字符(字节字节)为单位的,为单位的, 输入输出输入输出数据数据流流仅受程序控制,不受物理符号控制(如:回车,换行符),仅受程序控制,不受物理符号控制(如:回车,换行符), 称这样称这样的文件为的文件为 流文件。流文件。10000的二进制形式的二进制形式四、通过文件输入四、通过文件输入/ /输出输出浙江科技学院教

37、信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 C 语言处理文件通常使用语言处理文件通常使用缓冲文件系统缓冲文件系统 缓冲文件系统缓冲文件系统 系统自动地在内存中为每个正在使用的文件系统自动地在内存中为每个正在使用的文件名开辟一个名开辟一个 缓冲区。缓冲区。用于处理用于处理文本文件文本文件(字符流)。(字符流)。 程序数据区程序数据区 (输入、输出输入、输出)文件缓冲区文件缓冲区 磁盘文件磁盘文件 标准的标准的 C 语言只采用缓冲文件系统语言只采用缓冲文件系统 :既可以处理既可以处理文本文件文本文件,也也可以

38、处理可以处理 二进制文件。二进制文件。C语言中对文件的读写都是用库函数来实现。语言中对文件的读写都是用库函数来实现。四、通过文件输入四、通过文件输入/ /输出输出浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如:(如:文件的名字文件的名字 、文件状态与文件当前位置等、文件状态与文件当前位置等)。这些信息保存在一个)。这些信息保存在一个 结构体类型的变量中。结构体类型的变量中

39、。 结构体类型是由系统定义的,名为结构体类型是由系统定义的,名为 FILE 。 Turbo C 在在 stdio.h 文件中有以下的文件类型声明:文件中有以下的文件类型声明:typedef struct char level ; /* 缓冲区缓冲区满满或或空空 的程度的程度 */unsigned flags ; /* 文件状态标志文件状态标志 */char fd ; /* 文件描述符(文件号)文件描述符(文件号) */unsigned char hold ; /* 如无缓冲区不读取字符如无缓冲区不读取字符 */char bsize ; /* 缓冲区大小缓冲区大小 */unsigned char

40、 *buffer ; /* 数据缓冲区的位置数据缓冲区的位置 */unsigned char *curp ; /* 指针,下一个字符的位置指针,下一个字符的位置 */unsigned istemp ; /* 临时文件,指示器临时文件,指示器 */char token ; /* 用于有效性检查用于有效性检查 */ FILE ;v文件类型指针浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 有了有了FILE 类型之后,就可以用它来类型之后,就可以用它来 定义定义FILE类型的变类型的变量。量。例如例如

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

42、针浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 例如例如: fp=fopen(a1,r);说明:说明: a1 为文件名为文件名 , 是字符串。称为是字符串。称为外部文件名。外部文件名。 使用方式为:使用方式为: 只读只读方式。方式。 fopen 函数带回指向文件函数带回指向文件a1 的指针,并赋给的指针,并赋给 fp,使,使得得 fp指向指向a1。fp 称为称为内部文件名内部文件名。 v文件的打开与关闭文件的打开与关闭1. 文件的打开文件的打开( fopen 函数函数 ) C语言中用语言中用

43、fopen( ) 函数来实现打开文件函数来实现打开文件, fopen 函数的调用函数的调用方式为方式为 : FILE *fp; fp = fopen(文件名,使用文件方式文件名,使用文件方式) ;浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 通过通过 fopen( ) 使使内部文件名内部文件名 和和 外部文件名外部文件名联系上,即联系上,即fp 指向指向 a1文件。文件。在打开一个文件时,通知给编译系统有以下在打开一个文件时,通知给编译系统有以下3个信息:个信息:需要打开(即访问)的文件名。需

44、要打开(即访问)的文件名。使用文件的方式。使用文件的方式。让哪一个指针变量指向被打开的文件。让哪一个指针变量指向被打开的文件。如果如果 fopen 函数打开文件失败,则返回一个空指针值函数打开文件失败,则返回一个空指针值 NULL。v文件的打开与关闭文件的打开与关闭浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 为避免因上述原因的出错,造成对文件读写操作出错,为避免因上述原因的出错,造成对文件读写操作出错,常用以下的方法来打开一个文件,以确保对文件读写操作的常用以下的方法来打开一个文件,以确保对

45、文件读写操作的正确性:正确性: if(fp=fopen(c:myfile.dat,w+)=NULL) printf(Cannot open file the file exit!); exit(0); /* 退出程序退出程序 */ /* 此处编写打开文件后,对文件读此处编写打开文件后,对文件读写的代码写的代码 */ v文件的打开与关闭文件的打开与关闭注意:注意:指定文件路径要使用指定文件路径要使用“盘符盘符:文件夹名文件夹名文件名文件名”形式形式浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 文

46、件使用方式文件使用方式含含 义义 r(只读)(只读) 为输入打开一个为输入打开一个已存在已存在的文本文件。的文本文件。 w(只写)(只写) 为输出创建新文件,为输出创建新文件,(若文件已存在,则文件内容被清空若文件已存在,则文件内容被清空) a (追加数据追加数据) 只用于向只用于向已存在已存在的文件的末尾的文件的末尾添加添加数据。数据。 rb(只读)(只读)为输入打开一个为输入打开一个已存在已存在的二进制文件。的二进制文件。wb(只写)(只写)为输出打开一个二进制文件。若文件不存在,则创建新文件为输出打开一个二进制文件。若文件不存在,则创建新文件ab(追加)(追加)打开一个打开一个已存在已存

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

48、清空ab+(读(读/写)写)保留已存在的文件,保留已存在的文件,可以添加数据,也可以读取数据可以添加数据,也可以读取数据v文件的打开与关闭文件的打开与关闭浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2. 文件的关闭(文件的关闭(fclose 函数函数 ) 关闭文件关闭文件 就是使文件指针不再指向该文件,即使文就是使文件指针不再指向该文件,即使文件指针变量与文件件指针变量与文件“脱钩脱钩”。C 语言中用语言中用 fclose( ) 函数来关闭文件,函数来关闭文件, fclose 函数的调用函数

49、的调用形式是形式是 : fclose (文件指针文件指针) ; 例如例如 : fclose(fp) ; 关闭关闭 fp 所指向的文件所指向的文件 如果如果fclose 函数关闭文件成功,则返回函数关闭文件成功,则返回零值零值;如果;如果fclose 函数关闭文件失败,则返回函数关闭文件失败,则返回非零值非零值 EOF( -1),EOF 为为文件结文件结束符。束符。v文件的打开与关闭文件的打开与关闭浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 在语言中提供了多种文件读写的函数:在语言中提供了多种

50、文件读写的函数: 字符读写函数:字符读写函数: fgetc和和fputc 字符串读写函数:字符串读写函数:fgets和和fputs 格式化读写函数:格式化读写函数:fscanf和和fprinf 数据块读写函数:数据块读写函数:freed和和fwrite v 文件的读写文件的读写浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 1. fputc 函数函数 把把一个字符一个字符写到写到 磁盘文件上去,磁盘文件上去, 调用方式为调用方式为 : fputc(ch , fp); 功能:其作用是功能:其作用是

51、 将字符(将字符(ch 的值)输出到的值)输出到 fp 所指向的文件中去所指向的文件中去。如果输出成功,则返回。如果输出成功,则返回 ch字符;否则,返回字符;否则,返回 EOF (即(即 -1)。)。v 文件的写操作文件的写操作例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfile.txt文件中文件中 函数函数fprintf()、fputs()、fputc()和和fwrite()均为文件的写操作函均为文件的写操作函数,它们在数,它们在stdio.h头文件中的原型定义形式如下:头文件中的原型定义形式如下:int fputc(int ch,FILE *fp);i

52、nt fputs(char *string,FILE *fp);int fprintf(FILE *fp,char *format,);int fwrite(void *buf,int size,int count,FILE *fp);浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 #include void main() FILE *fp; char ch80,*p=ch; int n; fp=fopen(c:myfile.txt,w); /* 打开文件打开文件*/ printf(input

53、a string:n); for(n=1; n=5; n+) gets(p); /* 输入一行字符输入一行字符 */ while (*p!=0) /* 逐个字符写入文件逐个字符写入文件 */ fputc(*p,fp); p+; fputc(n,fp); /* 写入换行符写入换行符 */ fclose(fp); v 文件的写操作文件的写操作浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 2字符串写函数字符串写函数fputs()fputs函数是向指定的文件输出一个字符,其使用格式:函数是向指定的文件

54、输出一个字符,其使用格式: fputs(str, fp); 其中,其中,fp为定义的文件指针变量;为定义的文件指针变量;str可以是指向字符串的指针可以是指向字符串的指针变量、字符数组名或字符串常量。例如:变量、字符数组名或字符串常量。例如:fputs(China,fp);操作成功,函数返回操作成功,函数返回0;写操作失败,返回非;写操作失败,返回非0。 例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfile.txt文件中文件中v 文件的写操作文件的写操作浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goi

55、t.Net.Net第2讲 数据输入/输出 #includevoid main() FILE *fp; char ch80,*p=ch; int n; fp=fopen(c:myfile.txt,w); /* 打开文件打开文件*/ printf(input a string:n); for(n=1;n=5;n+) gets(p); /* 输入一行字符输入一行字符 */ fputs(p,fp); /* 写入该行字符写入该行字符 */ fputc(n,fp); /* 写入换行符写入换行符 */ fclose(fp);例:输入例:输入5行字符,将其写入到行字符,将其写入到C盘根目录的盘根目录的myfi

56、le.txt文件中文件中v 文件的写操作文件的写操作浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 3格式化写函数格式化写函数fprintf() 把格式化的数据写到文件中,其中格式化的规定与把格式化的数据写到文件中,其中格式化的规定与printf()函数相函数相同,所不同的只是同,所不同的只是fprintf()函数是向文件中写入,而函数是向文件中写入,而printf()是向屏幕是向屏幕输出。如:输出。如:fprintf(fp,s=%f,i=%dn,s,i); 其返回值为实际写入文件中的字符个数(

57、字节数);如果写错误,其返回值为实际写入文件中的字符个数(字节数);如果写错误,则返回一个负数。则返回一个负数。 例题:例题:计算数列计算数列1,-1/3!,1/5!,-1/7!,1/9!,.的和至某项的绝对的和至某项的绝对值小于值小于1e-5时为止时为止(该项不累加该项不累加),将求和的结果以格式,将求和的结果以格式%.6写到考生目录下新建文件写到考生目录下新建文件design.dat。 v 文件的写操作文件的写操作浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 #include #inclu

58、de void main() FILE *p; float s=1,t=1,i=3; / / / / / / / / 例题:例题:计算数列计算数列1-1/3!+1/5!-1/7!+1/9!,.的和至某项的绝对的和至某项的绝对值小于值小于1e-5时为止时为止(该项不累加该项不累加),将求和的结果以格式,将求和的结果以格式%.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,

59、s); fclose(p);浙江科技学院教信系计算机基础教学网站:浙江科技学院教信系计算机基础教学网站:www.Goitwww.Goit.Net.Net第2讲 数据输入/输出 v 文件的读操作文件的读操作标准标准C提供的文件读操作函数有提供的文件读操作函数有fgetc()、fgets()、fscanf() 和和fread(),它们在,它们在stdio.h头文件中的原型定义形式如下:头文件中的原型定义形式如下:int fgetc(FILE *fp);char * fgets(char *string,int n,FILE *fp); int fscanf(FILE *fp,char *forma

60、t,); int fread(void *buf,int size,int count,FILE *fp);说明:说明: (1)对于读操作,在文件内部有一个位置指针,用来指向)对于读操作,在文件内部有一个位置指针,用来指向文件的当前读的字节。在文件打开时,该指针总是指向文件的文件的当前读的字节。在文件打开时,该指针总是指向文件的第一个字节。当读取一个数据(字符、一字符串,一个整数或第一个字节。当读取一个数据(字符、一字符串,一个整数或一块数据),该位置指针将自动向后移动到下一个数据位置。一块数据),该位置指针将自动向后移动到下一个数据位置。浙江科技学院教信系计算机基础教学网站:浙江科技学院教信

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论