1、第三章第三章 格式化输入格式化输入和输出和输出n一、字符数据的输入输出n二、格式化的输入与输出程序程序是数据数据的处理器:它接收输入数据,对数据进行处理,再将得到数据输出。输出输出:从计算机向外部输出设备(显示器,打印机)输出数据输入输入:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据.由于各种设备差别很大,C缓冲文件系统把每种设备都转换成称为流(stream)的逻辑设备。流给程序员提供了与设备无关的一致界面,因此能够用于写入磁盘文件的函数也能用于写入显示器终端。本章讨论标准的输入和输出函数。也就是认为输入输出函数是从键盘输入,向显示屏输出。C语言中标准输入输出C语言函数库中有一批“标准输入
2、输出函数标准输入输出函数”,例如:字符输入函数:getchar()字符输出函数:putchar()格式输入函数:scanf()格式输出函数:printf()字符串输入函数:gets()字符串输出函数:puts()使用这些函数时,应在程序的开头处写下预编译命令:#include“stdio.h”或或#include 用编译命令“#include”将有关头文件“stdio.h”包括到用户的源文件当中。一、字符数据的输入输出1.字符输出函数 putchar()p函数作用:向终端输出一个字符p一般形式:putchar(c)输出变量c的值 C可以是字符型变量或整型变量例例1 输出单个字符。输出单个字符。
3、includevoid main()char a,b,c;a=:;b=);c=*;putchar(a);putchar(b);putchar(c);putchar(n);运行结果::)*putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);运行结果::)*n也可以输出其他转义字符,例如:putchar(101);(输出字符A)putchar();(输出单引号字符)putchar(015)(输出回车,不换行,使输出的当前位置移到本行开头)2.字符输入函数p函数作用:从终端(或系统隐含指定的输入设备)输入一个字符。p没
4、有输入参数,一般形式:getchar()p函数值:从输入设备得到的字符。例例2 输入单个字符。输入单个字符。#includevoid main()char c;c=getchar();putchar(c);putchar(n);运行程序:运行程序:从键盘输入字符从键盘输入字符*按按EnterEnter键键屏幕上将显示输出的字符屏幕上将显示输出的字符*也可改写为:putchar(getchar();二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)一般格式:一般格式:printf(”格式控制格式控制”,输出列表);输出列表);例如:例如:pr
5、intf(“a=%d,b=%cn”,a,b)功功能能:向向默默认认输输出出设设备备(一一般般是是显显示示器器)输输出出“输输出出列列表表”中各数据项。中各数据项。1.格式控制格式控制也称“控制字符串”,是由双引号括起来指定输出输出格式的字符串格式的字符串。他由格式说明格式说明、控制字符控制字符和普通字符普通字符三部分组成。(1)格式说明)格式说明构成:构成:由“%”字符开始后面跟有各种格式字符。作用:作用:以说明输出数据的类型、形式、长度、小数位等格式。C语言提供的常用语言提供的常用printf()函数格式说明:()函数格式说明:二、二、格式化的输入与输出格式化的输入与输出1.printf()
6、函数(格式输出函数)函数(格式输出函数)n15001.5*103=1.5E+3n0.000011*10-51E-5(2)控制字符)控制字符控制字符用于控制设备的动作,如下表中制表符“t”、换行符“n”等。转义字符表示含义n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头t横向跳格,横向跳到下一个输出区横向跳格,横向跳到下一个输出区r回车,将当前位置移到本行开头回车,将当前位置移到本行开头f走纸换页,将当前位置移到下页开头走纸换页,将当前位置移到下页开头b退格,将当前位置移到前一列退格,将当前位置移到前一列v竖向跳格竖向跳格例如:例如:printf(“x=%dn”,x);二、二、格式
7、化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)(3)普通字符)普通字符除格式说明和控制字符之外,其他字符均属除格式说明和控制字符之外,其他字符均属普通字符普通字符,打印,打印时按原样输出。时按原样输出。例如:例如:printf(“x=%d,%c”,12,6*8);其中“x=”和“,”都是普通字符。输出结果是:输出结果是:x=12,0二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)2.输出列表输出列表:输出列表:就是需要输出的各数据项表达式,表达式之间用就是需要输出的各数据项表达式,表达式之间用
8、逗号分隔。逗号分隔。注意:(1 1)表达式可以由变量构成,也可以由常量构成;)表达式可以由变量构成,也可以由常量构成;(2 2)表表达达式式之之间间的的逗逗号号不不是是逗逗号号表表达达式式,而而是是确确定定计计算算顺序的分隔符,自右向左进行的计算。顺序的分隔符,自右向左进行的计算。二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)3.附加说明符在%与格式字符间插入附加说明符,组成:“%”输出格式来达到更高输出格式要求。二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)附加说明符意 义l用
9、于长整型,可以加在格式符用于长整型,可以加在格式符d、o、x、u的的前面前面m(正整数)(正整数)数据输出的最小宽度,当数据实际宽度超过数据输出的最小宽度,当数据实际宽度超过m时,则按实际宽度输出,如实际宽度短于时,则按实际宽度输出,如实际宽度短于m,则输出时前面补则输出时前面补0或空格。或空格。.n(正整数)(正整数)对实数表示输出对实数表示输出n位小数,对字符串,表示从位小数,对字符串,表示从左截取的字符个数左截取的字符个数-输出的字符或数字在域内向左对齐,默认右输出的字符或数字在域内向左对齐,默认右对齐对齐+输出的数字前带有正负号输出的数字前带有正负号0在数据前多余空格处补在数据前多余空
10、格处补0#用在格式字符用在格式字符o或或x前,输出八进制或十六进前,输出八进制或十六进制数时带前缀制数时带前缀0或或0 x二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)【例例3.1】输出整型、长整型、无符号整型数据#include“stdio.h”void main()int y=20;long a=1024;unsigned b=54321;printf(“%d,%ld,%un”,y,a,b);printf(“%+8d,%+8ld,%+8un”,y,a,b);printf(“%08d,%08ld,%08un”,y,a,b);print
11、f(“%-8d,%-8ld,%-8un”,y,a,b);printf(“%o,%lo,%on”,y,a,b);printf(“%#x,%#lx,%#xn”,y,a,b);printf(“%8o,%8lo,%8on”,y,a,b);printf(“%-8x,%-8lx,%-8xn”,y,a,b);二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)运行结果如下:(运行结果如下:(代表空格代表空格)20,1024,54321+20,+1024,5432100000020,00001024,0005432120,1024,5432124,2000,
12、1520610 x14,0 x400,0 xd432124,2000,15206114,400,d4321二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)%-8.1E%-8.3fn86,1040【例例3.2】输出字符和字符串#include“stdio.h”void main()char ch=a;printf(“%cn”,ch);printf(“%-3cn”,ch);printf(“%3cn”,ch);printf(“%sn”,”programing”);printf(“%15sn”,”programing”);printf(“%-15
13、sn”,”programing”);printf(“%10.5sn”,”programing”);printf(“%-10.5sn”,”programing”);运行结果如下:aaaprogramingprogramingprogramingprogrprogr二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)【例例3.3】输出实型数据#include“stdio.h”void main()float x,y;double a;x=111111.111;y=123.468;a=333333333.33333;clrscr();printf(
14、fn”,x);printf(“%fn”,a);printf(“%10f,%10.2f,%.2f,%-10.2fn”,x,x,x,x);printf(“%en”,x);printf(“%en”,a);printf(“%10e,%10.2e,%.2e.%-10.2en”,a,a,a,a);printf(“%f,%e,%g”,y,y,y);二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)程序运行结果如下:程序运行结果如下:111111.109375333333333.333330111111.109375,111111.11,111111.
15、11,111111.111.11111e+053.33333e+083.33333e+08,3.33e+08,3.33e+08.33e+08123.468002,1.23468e+02,123.468二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)4.在使用printf()函数时,还应注意以下问题(1)转换说明与输出参数不一致时可能产生错误。)转换说明与输出参数不一致时可能产生错误。printf()函中格式符串中的数目多于列表参数个数时,则会输出错误数据;如果格式符串中的数目少于列表参数个数,则多出的参数不被输出。例如:例如:#inclu
16、de“stdio.h”void main()int i=-6,x=5;float y=123.456;printf(“%d,%dn”,i);printf(“%-4d,%f”,i,y,x);输出结果为:输出结果为:-6,2509 /*多余格式符输出错误数据*/-6,123.456001 /*x未被输出*/二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)(2)“f”格式符一般为格式符一般为7位有效数字位有效数字,双精度一般为双精度一般为16位。位。例如:例如:#include“stdio.h”void main()float x=111111
17、111,y=222222.222;printf(%f,x+y);输出结果为:输出结果为:333333.328125 /*前7位是有效数字,后面数字无意义*/二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)(2)“f”格式符一般为格式符一般为7位有效数字位有效数字,双精度一般为双精度一般为16位。位。#include“stdio.h”void main()double x=111111.11111,y=222222.22222;printf(%lf,x+y);输出结果为:输出结果为:333333.333330 /*可达16位是有效数字,小
18、数点保留6位*/二、二、格式化的输入与输出格式化的输入与输出1.printf()函数(格式输出函数)函数(格式输出函数)二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)一般形式:一般形式:scanf(格式控制格式控制,地址列表);,地址列表);功功能能:从键盘向程序中的变量输入一个或若干个任意类型的数据。例如:例如:scanf(%d,%d,&a,&b););1.格式控制格式控制格式控制与printf基本相同,由格式说明、附加说明字符和普通字符三部分组成。%格式字符作 用%d,%i输入带符号的十进制整数输入带符号的十进制整数%u输入无符号十进制整数输
19、入无符号十进制整数%x,%X输入无符号的十六进制整数输入无符号的十六进制整数(不区分大小写不区分大小写)%o输入无符号形式八进制整数输入无符号形式八进制整数%f输入实数,可以用小数形式或指数形式输入输入实数,可以用小数形式或指数形式输入%e,%E%g,%G与与%f作用相同,作用相同,%e、%f、%g可以互相替换可以互相替换%c输入单个字符输入单个字符%s输入字符串,将字符串送到一个字符数组中,在输入时以非空字符输入字符串,将字符串送到一个字符数组中,在输入时以非空字符开始,遇到回车或空格字符结束开始,遇到回车或空格字符结束二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数
20、函数(格式输入函数)格式修饰符格式修饰符作作 用用L或l用在格式字符用在格式字符d、o、x、u的前,表示输入长整型数据,用在的前,表示输入长整型数据,用在f或或e前,表示输入前,表示输入double型数据。型数据。h用在格式字符用在格式字符d、I、o、x前,表示输入短整型数据前,表示输入短整型数据m指定输入数据所占宽度,不能用来指定实数型数据宽度,应为指定输入数据所占宽度,不能用来指定实数型数据宽度,应为正整数正整数*表示该输入项在读入后不赋值给相应的变量表示该输入项在读入后不赋值给相应的变量二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)2.地
21、址列表地址列表地址列表:用逗号分隔的若干接收输入数据的变量地址。各变量地址间用逗号“,”分隔。变量地址组成:由地址运算符“&”后跟变量名组成。例如:例如:#includevoidmain()inta,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“a=%d,b=%d,c=%dn”,a,b,c);输入数据的格输入数据的格式表示什么意式表示什么意思思?二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)运行时按以下方式输入运行时按以下方式输入a,b,c的值:的值:345 (输入a,b,c的值,用空格间隔)a=3,b=4,c=5 (
22、输出a,b,c的值)注:输输入入数数据据时时,在在两两个个数数据据之之间间以以一一个个或或多多个个空空格格间间隔隔,也也可可以以用用Enter键、键、Tab键分隔,键分隔,不能用逗号作为两个数据的分隔符。不能用逗号作为两个数据的分隔符。下面输入均为合法:下面输入均为合法:345 3 4 53(按Tab键)4 5如下面的输入不合法如下面的输入不合法:3,4,5二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)3.使用scanf()函数时应注意的问题(1)地址列表中的各个参量都是变量地址,而不是变量名。)地址列表中的各个参量都是变量地址,而不是变量名。例
23、如:例如:设a、b 分别为整型变量和浮点型变量,则scanf(“%d%f”,&a,&b);是合法的。而scanf(%d%f,a,b);是非法的。二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)(2)普通字符在输入数据时,在对应位置上输入相同字符。)普通字符在输入数据时,在对应位置上输入相同字符。例如:例如:scanf(%d,%d,&a,&b)输入时应用如下形式:输入时应用如下形式:3,4以下输入格式是不对的:以下输入格式是不对的:343:4。又如:又如:scanf(”%d:%d:%d”,&x,&y,&z);输入形式应为:12:13:14。二、二、格
24、式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)(3)对于实型数据,输入时不能规定其精度。)对于实型数据,输入时不能规定其精度。例如:例如:scanf(“%6.3f”,&x);是不合法的。(4)在用)在用“%c”格式输入字符时,空格字符和格式输入字符时,空格字符和“转义字符转义字符”都将作为有效的字符输入。都将作为有效的字符输入。例如:例如:scanf(%c%c%c,&c1,&c2,&c3);如果输入:如果输入:abc则字符ac1,字符c2,字符bc3。正确输入方法是:正确输入方法是:abc(中间没有空格)c1、c2、c3的值的值分别是什么?分别是什么?二、
25、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)(5)在输入数据时,遇到下列情况时,输入数据认为结束:)在输入数据时,遇到下列情况时,输入数据认为结束:遇空格或按遇空格或按“回车回车”或或“跳格跳格”(Tab)键)键;遇宽度结束,如遇宽度结束,如“%3d”,只取,只取3列列;遇非法输入遇非法输入;例如:例如:scanf(%d%c%f,&a,&b,&c);若输入123a456o.26123a,字符字符ab,456c注:注:第3个数4560.26错打成456o.26,由于456后面出现了英文字母“o”,就认为此数据结束,则将会把456送给c,后面的数据将不
26、被接受。二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)(6)当使用多个)当使用多个scanf()函数连续给多个字符变量赋值时,例函数连续给多个字符变量赋值时,例如:如:#includevoid main()char c1,c2;scanf(“%c”,&c1);scanf(“%c”,&c2);printf(“c1 is%c,c2 is%c”,c1,c2);二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)运行该程序时如果输入:如果输入:A输出结果为:c1isA,c2is(即C2接收了一个回车符,而没有被赋值)如果输入:如果输入:AB输出结果为:c1isA,c2isB。(7)对于)对于unsigned型变量所需的数据,可以用型变量所需的数据,可以用%u,%d或或%o,%x格式输入。格式输入。二、二、格式输入与输出格式输入与输出2 scanf()函数(格式输入函数)函数(格式输入函数)
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818