1.printf ( )函数(格式输出函数)
(1) printf()函数调用的一般形式为:
其功能是将输出表列的数据按照格式控制部分的格式显示到显示器屏幕上。在前面的例题中已多次使用过这个函数。
printf()函数的参数分为两个部分。第一部分是格式控制,是使用双引号括起来的字符串,其中包括普通字符和以“%”开头的格式控制符,普通字符输出是按照原样输出,格式控制符用于说明输出数据的类型、形式、长度、小数位数等。第二部分是需要输出的数据,可以是零个或多个,数据之间用逗号隔开。输出数据的格式由第一部分的格式控制符决定,要求格式控制符和各输出项在数量和类型上一一对应。
例3.4 格式输出。
编写程序:
创建一个名为“eg3_4.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中4次输出了a,b的值,但由于格式控制部分的形式不同,输出的结果也不相同。
(2)常用格式符
1)d格式符用来输出一个有符号的十进制整数,其基本用法有如下3种。
%d:按实际长度输出十进制整数。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左边补以空格;如果大于m,则按实际位数输出。
% ld:输出长整型数据。
例3.5 d格式符输出。
编写程序:
创建一个名为“eg3_5.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中有3个输出语句,由于格式控制不同,输出的结果也不相同。第2个printf ()函数格式控制部分中加入了宽度限制,因此输出a, b值时,由于a本身的宽度为5,比4大,因此原样输出;而b的宽度为3,比4小,因此为了保证宽度为4,左边补了一个空格。第3个printf()函数的格式控制符要求输出长整型,其中第一个格式控制符“% ld”表示原样输出,而第二个格式控制符“%6ld”表示限定输出长整型的宽度为6,因此左边补两个空格后输出c的值。
2)o格式符用来输出八进制整数形式,输出的数值不带符号,符号位也作为八进制数的一部分输出。
3)x格式符用来输出十六进制整数形式,输出的数值不带符号,符号位也作为十六进制数的一部分输出。
对于格式字符o,x也可以通过“% mo”或者“% mx”来限制输出数据的位数,原则与“%mmd”相同。
例3.6 o和x格式符输出。
编写程序:
创建一个名为“eg3_6.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中有两个输出语句,由于格式控制不同,输出的结果也不相同。 -2在内存单元中的存放形式(以补码形式存放)为11111111111111111111111111111110(共32位)。第一个输出语句中,“%d”是以十进制数形式原样输出,“%o”是以符号位作为八进制整数的一部分和数据一起输出,因此值为377777777776,“ % x”是以符号位作为十六进制整数的一部分和数据一起输出,因此值为fffffffe。第二个输出语句中用“% mo”格式输出,通过m指定字段宽度,“% 10o”格式输出a,因为数值377777777776的宽度大于10,因此原样输出;“% 10x”格式输出a,数值的实际宽度小于指定宽度,因此结果为“fffffffe”(数字前有2个空格)。
4)c格式符用来输出单个字符,其基本用法有如下两种。
%c:每次输出一个字符。
%mc:m为指定的输出字段的宽度。如果数据的位数m大于1,则左边补以m-1个空格。
例3.7 c格式符输出。
编写程序:
创建一个名为“eg3_7.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
第二个printf()函数的格式控制符为“%5c”,限定输出字符宽度为5,因此,先输出4个空格再输出ch的值。
5)s格式符用来输出一个字符串,其基本用法有如下5种。
%s:按照字符串的实际形式输出。
% ms:输出的字符串占m列。若串长大于m,则原样输出;若串长小于m,则字符串向右对齐,左边补空格。
%-ms:输出的字符串占m列。若串长大于m,则原样输出;若串长小于m,则字符串向左对齐,右边补空格。
% m.ns:输出占m列,只取字符串中左端n个字符,输出在m列的右侧,左边补空格。
%-m.ns:输出占m列。只取字符串中左端n个字符,输出在m列的左侧,右边补空格;若n>m,m自动取n值。
例3.8 s格式符输出。
编写程序:
创建一个名为“eg3_8.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中用6种不同形式的格式控制符输出字符串COMPUTER。用“%3s”格式输出时,因为限定宽度3小于字符串的长度,因此字符串原样输出,即为“COMPUTER”;用“%10s”格式输出时,因为限定宽度10大于字符串的长度,字符串输出时靠右输出左边补2个空格,即为“COMPUTER”;用“%-10s”格式输出时,因为限定宽度10大于字符串的长度,字符串输出时靠左输出右边补2个空格,即为“COMPUTER ”;用“%7.2s”格式输出时,限定输出宽度为7,取字符串前2个字符,字符串靠右输出左边补5个空格,即为“CO”;用“%-6.4s”格式输出时,限定输出宽度为6,取字符串前4个字符,字符串靠左边输出右边补2个空格,即为“COMP ”;用“%.3s”格式输出时,未限定输出宽度,取字符串前3个字符,即为“COM”
6)f格式符用来以小数形式输出浮点型数据,其基本用法有如下3种。
%f:不指定字段宽度,由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。应当注意,在输出的数字中并非全部数字都是有效数字。
%m.nf:指定数据宽度和小数位数。其中m用于指定数据宽度,n用于指定小数位数,输出数据靠右输出,不足m列左补空格,大于m列原样输出。
%-m.nf: m用于指定数据宽度,n用于指定小数位数,输出的数据向左对齐,不足m列右补空格,大于m列原样输出。
例3.9 f格式符输出。
编写程序:
创建一个名为“eg3_9.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中用4种不同形式格式控制符输出a。用“% f”格式输出时,输出宽度不限定,保留6位小数,即为“166.666667”;用“% 15.8f”格式输出时,因为限定宽度15大于实际数据长度,数据输出时靠右输出,保留8位小数,小数点占1位,整数部分占3位,还需要左边补3个空格,结果即为“166.66666667”;用“%-15.8f”格式输出时,因为限定宽度15大于实际数据长度,数据输出时靠左输出,保留8位小数,小数点占1位,整数部分占3位,还需右边补3个空格,结果即为“166.66666667 ”;用“%7.5f”格式输出时,限定输出宽度为7小于数据实际长度,因此数据按实际长度输出,取5位小数,结果即为“166.66667”。
7)e格式符用来指定以指数形式输出浮点数,其基本用法有如下3种。
%e:VC++要求输出小数位数为6位,超过6位时,进行四舍五入。指数部分占5列(指数值占3列,e占1列,指数符号占1列),小数点前必须有且只有1位非零数字。
%m.ne:m用于指定数据宽度,n用于指定小数位数,输出的数据向右对齐,不足m列左补空格,大于m列原样输出。(www.daowen.com)
%-m.ne:m用于指定数据宽度,n用于指定小数位数,输出的数据向左对齐,不足m列右补空格,大于m列原样输出。
例3.10 e格式符输出。
编写程序:
创建一个名为“eg3_10.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中用3种不同形式的格式控制符输出a。用“% e”格式输出时,输出宽度不限定,保留6位小数,指数部分占5列(指数值占3列,e占1列,指数符号占1列),小数点前必须有而且只有1位非零数字,即为“1.234568e +003”;用“%-13.2e”格式输出时,因为限定宽度13大于实际数据长度,数据输出时靠左输出,小数点前必须有且只有1位非零数字,小数点占1位,保留2位小数,指数部分占5列,还需要右边补4个空格,结果即为“1.23e +003 ”;用“% 13.2e”格式输出时,因为限定宽度13大于实际数据长度,数据输出时靠右输出,小数点前必须有而且只有1位非零数字,小数点占1位,保留2位小数,指数部分占5列,还需要左边补4个空格,结果即为“1.23e+003”。
综上所述,输出格式控制符的含义如表3-2所示。
表3-2 输出格式控制符的含义
2.scanf函数()(格式输入函数)
( 1) scanf()函数调用的一般形式为:
其功能是按用户指定的格式从键盘上把数据输入到指定的变量之中,程序执行到输入语句时,会停下来等待用户输入数据,然后继续执行。
scanf()函数的参数也由两部分构成。第一部分为格式控制部分,普通字符原样输入,格式控制符的作用与printf()函数类似,格式控制符和地址表列中的变量一一对应,格式控制符控制的不是地址,而是该地址对应的变量。第二部分为地址表列,需要对变量取地址,取地址运算符&为单目运算符,运算对象一般为变量,作用是取&运算操作对象的地址,如&a即为取变量a的地址,地址表列中给出各变量的地址。
例3.11 输入三角形的三条边,求三角形的周长。
编写程序:
创建一个名为“eg3_11.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
“scanf("a=%d,b=%d,c=%d",&a,&b,&c);”语句中的3个格式控制符“% d”与地址表列中的变量a,b,c一一对应。&a, &b, &c分别表示变量a,b,c的地址。这个地址就是编译系统在内存中给a, b,c变量分配的地址,程序运行时输入的内容就是变量对应地址中的值,变量的值和变量的地址是两个不同的概念,变量的地址是由C编译系统分配的,用户不必关心具体的地址是多少。因此,在运行界面输入“a =3,b =4,c =5”,执行后计算结果为周长等于12。在输入过程中格式控制部分的普通字符要求原样输入,不能省略。
表示输入数据类型的各种输入格式控制符的含义如表3-3所示。
表3-3 输入格式控制符的含义
(2)使用scanf ()函数的几点说明。
1)当格式控制部分中两个格式控制符之间不含任何普通字符时,输入采用scanf ()函数默认的分隔方式,即若程序运行中需要输入非字符类数据,两个数之间可以添加空格间隔,也可以按回车符或制表符(Tab)间隔。
例3.12 两个格式控制符之间不含任何普通字符的输入。
编写程序:
创建一个名为“eg3_12.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
由于输入语句“scanf (" % d% d% d" , &a, &b, &c) ;”中的格式控制符之间没有任何间隔,如果直接输入345后按回车键,编译系统将345赋给变量a;当输入3(空格)4(空格)5后按回车键,程序才能得到正确的结果,当然也可以用制表符或回车符代替空格符作为间隔。
2)格式控制部分存在普通字符,其中的普通字符通常用来分隔输入数据项,程序运行中需要输入数据时,这些普通字符必须按照原样输入,如果输入内容和格式控制部分不一致,输入函数将立即结束。
例3.13 格式控制部分存在普通字符的输入。
编写程序:
创建一个名为“eg3_13.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
格式控制部分的普通字符必须原样输入。
3)当格式控制部分通过“%c”格式输入字符数据时,输入不能以空格、回车符或制表符(Tab)间隔,因为空格、回车符或制表符(Tab)本身也是字符。
例3.14 使用格式控制符“%c”输入字符。
编写程序:
创建一个名为“eg3_14.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
scanf()函数使用格式控制符“%c”每次可读入一个字符,当输入a(空格)b(空格)c时,因为空格本身也是字符,因此相当于“a='a' ;b='' ;c='b'”。
4)输入数据可以指定列宽,系统将根据指定列宽自动截取数据。
例3.15 固定列宽的格式输入。
编写程序:
创建一个名为“eg3_15.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
程序执行到“scanf(" % 3d%4d" , &a, &b) ;”语句时,输入123456789,因为指定宽度,将123赋给变量a,而把4567赋给变量b,输入的其他部分被截去。
5)输入double型数据是用格式控制符“% lf”,不能用“%f”。例如:
“ double a ; scanf ( " % f" , &a) ;”输入a之后,不能得到合法数据,应将“%f”改为“% lf”。
6)输入浮点型数据时不能规定数据的精度。例如:
“float a;scanf( "%4.2f" ,&a) ;”这个输入语句是非法的。
7)“%”后的“*”为附加说明符,用来跳过相应数据。例如:
scanf("%3d,% *2d,%3d" ,&a,&b) ;printf("a =%d,b =%d\n" ,a,b) ;
输入:123,45,678<回车>
运行结果:a=123,b=678
系统自动跳过了45。
8)输入函数格式控制部分尽量不要加'\n'。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。