1.格式输入函数
该函数是一个标准库函数。一般形式如下:
printf("格式控制字符串",输出项目清单);
用双引号内的格式控制字符串中,使用较多的符号为“%”,该符号与其后面的格式符,规定了对应输出项的输出格式,其他符号按原样输出。例如,%d用来输出十进制整数,%f用来输出实数。
其中的输出项目清单为选择项,视情况选或不选。
使用函数printf()时的注意事项。
●格式控制字符串中的占位符个数,应与输出项中的数目相同。如果输出项数少于占位符个数,则会输出一些无意义的信息;如果输出项数多于占位符个数,则多余的输出项不会被输出。
●占位符中的“类型”说明字符,应该与输出项中的数据的类型保持一致。否则,会输出错误的信息。例如:
在用双引号括起来的格式控制字符串中,因为有些控制字符无法从键盘输入,所以采用了一种“转义”的机制,例如‘\n’表示换行符。
下面再对printf()函数中的格式控制字符串的一般形式做进一步的解释。
printf()函数中格式控制字符串的一般形式为:
%[标志][输出最小宽度][精度][长度]类型/*方括号[ ]中的项目为可选项*/
各项的意义介绍如下。
(1)类型:类型字符用以表示输出数据的类型,其格式符和意义如表2-5所示。
表2-5 类型的格式字符及其意义
(2)标志:标志字符为-、+、空格、#,其意义如表2-6所示。
表2-6 标志字符及其意义
(3)输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,否则补以空格或0。
(4)精度:精度格式以“.”开头,后跟十进制整数。
本项的意义是,如果输出数字,则表示小数位数;如果输出字符,则表示字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
(5)长度:长度格式符为h和l两种,h表示按短整型量输出,l表示按长整型量输出。
例2-13 printf()函数中格式串使用示例。
程序运行结果如图2-17所示。
图2-17 程序运行结果
本例中第1个printf()函数以4种格式输出整型变量a的值,其中“%5d”要求输出宽度为5,而a的值只有两位,故补3个空格。
第2个printf()函数以4种格式输出实型量b的值。其中“%f”和“%lf”格式的输出相同,说明“l”符号对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5,故应该按实际位数输出,小数位数超过4位的部分被截去。
第3个printf()函数输出双精度实型变量c的值,由于“%8.4lf”指定精度为4,故截去了超过4位的部分。
第4个printf()函数输出字符型变量d的值,其中“%4c”指定输出宽度为4,故在输出字符m之前补加3个空格。
使用printf()函数时还要注意一个问题,那就是输出表列中的求值顺序。在VisualC++2010中,求值顺序是“自右向左”,而输出顺序是“从左至右”。
例2-14 输出表列求值顺序示例。
程序运行结果如图2-18所示。
图2-18 程序运行结果
本例调用printf()函数时,先求出第2个表达式++a的值9,此时a的值也自增为9;然后求第1个表达式a的值,此时应为9。所以程序运行结果为9,9。
2.格式输入函数(www.xing528.com)
该函数是一个标准的库函数。一般形式如下:
其中,放在双引号内的格式控制字符串用来规定输入格式,其用法和printf()相同。输入项目清单中至少要包含一个输入项,且必须是变量的地址(变量地址的表示形式是在变量名前面加一个“&”),当有多个输入项时,相互之间用逗号隔开。例如:
scanf("%f%d",&a,&b);/*将接收从键盘输入的一个实数和一个整数,并分别存放在变量a和b中。*/
使用函数scanf()时的注意事项。
●应保证格式控制串中的占位符的个数及类型与输入项中的个数及类型相同。
●输入项应为内存“地址”(普通变量前加取址运算符“&”)。
●格式控制串中,尽量不要加一些不必要的字符,否则会带来麻烦。例如:
只有当用户输入时使用“,”将两个数据分开时才会正确。如果将输入语句写成这样:
用户只有这样输入:a=10,b=2.34
才能得到正确的结果。
●对于double类型的变量,格式控制串应写成:%lf。例如:
下面再对scanf()中格式控制字符串的一般形式做进一步的解释。
scanf()函数中格式控制字符串的一般形式为:
%[*][输入数据宽度] [长度]类型 //方括号[ ]中的项目为可选项各项的意义介绍如下。
①类型:表示输入数据的类型,其格式符和意义如表2-7所示。
表2-7 scanf()函数中格式字符及其含义
②“*”符:用来表示该输入项读入后不赋予相应的变量,即跳过该输入值。例如:
③输入数据宽度:用十进制整数来指定输入数据的宽度。例如:
④长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。
注意:
①scanf()函数中没有精度控制,如“scanf("%4.2d",&a);”是非法的。
②scanf()函数中要求给出变量地址,如“scanf("%d",a);”会出错。
③在输入多个数值数据时,若格式控制串中没有非格式字符在"%d%d%d"之间作为输入时的间隔,则输入数据时可用空格、Tab或回车符作间隔。
例2-15 scanf()函数使用示例。
程序运行结果如图2-19所示。
图2-19 程序运行结果
④在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
例2-16 scanf()函数中格式符串使用示例。
程序运行结果如图2-20所示。
图2-20 程序运行结果
⑤如果格式控制串中有非格式字符,则输入时也要输入该非格式字符。例如:在上例中将“scanf("%c%c",&a,&b);”改为“scanf("%c,%c",&a,&b);”,则输入时应为x,y。
⑥如输入的数据与输出的类型要求不一致时,虽然编译能够通过,但结果将不正确。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。