无
分类: C/C++
2009-09-15 14:38:44
一、printf函数介绍
printf函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为:
标志 意义
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
空格 输出值为正时冠以空格,为负时冠以负号
# 对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点(??????)
运行结果
运行结果:
3、精度:
精度格式符以“.”开头,后跟十进制整数。意义是:
如果输出数字,则表示小数的位数;若实际位数大于所定义的精度数,则四舍五入。若不足则补0;
如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
4、长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。
5、Turbo C2.0提供的格式字符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━
符号 作用
──────────────────────────
%c 单个字符
%d 十进制有符号整数
%e 以“科学记数法”的形式输出十进制的浮点数 如2.451e+02
%f 输出十进制浮点数,不带域宽时,保留6位小数
%g 选用e或f格式中较短的一个输出十进制浮点数,不输出无效零
%0 无输出无符号八进制整数
%p 指针的值
%s 输出字符串
%u 输出无符号十进制整数
%x, %X 输出无符号十六进制整数 (不输出前缀Ox)
━━━━━━━━━━━━━━━━━━━━━━━━━━
一些特殊规定字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 作用
──────────────────────────
换行
f 清屏并换页
回车
Tab符
xhh 表示一个ASCII码用16进表示,
其中hh是1到2个16进制数
━━━━━━━━━━━━━━━━━━━━━━━━━━
使用这些转义字符时不需要加上%,可单独使用!
由本节所学的printf()函数, 并结合上一节学习的数据类型, 编制下面的程序,以加深对Turbo C2.0数据类型的了解。
其他需要注意的一些问题:
1、如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度,小数点前的数字代表最小宽度。
例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。
2、使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。请看下面两个例子:
运行结果
运行结果:
这两个程序的区别是用一个printf语句和多个printf 语句输出。但从结果可以看出是不同的。为什么结果会不同呢?就是因为printf函数对输出表中各量求值的顺序是自右至左进行的。在第一例中,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7。再对“-i++”项求值得-7,然后i自增1后为8。再对“i--”项求值得8,然后i再自减1后为7。再求“i++”项得7,然后i再自增1后为8。再求“--i”项,i先自减1后输出,输出值为7。 最后才求输出表列中的第一项“++i”,此时i自增1后输出8。
但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。
二、scanf函数介绍
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf("%c", &c1)时,给变量c1赋值"A",但回车符仍然留在缓冲区内,执行输入语句scanf("%c", &c2)时,变量c2输出的是一空行, 如果输入AB后回车, 那么输出结果为: c1 is A, c2 is B。
要解决以上问题, 可以在输入函数前加入清除函数fflush()( 这个函数的使用方法将在本节最后讲述)。修改以上程序变成:
在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
例如: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 %c",&a,&b,&c);则输入时各数据之间可加空格。
由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符。
4、格式字符串的一般形式为:
其中有方括号[]的项为任选项。各项的意义如下:
1)类型:表示输入数据的类型,其格式符和意义如下表所示。
格式 字符意义
d 输入十进制整数
o 输入八进制整数
x 输入十六进制整数
u 输入无符号十进制整数
f或e 输入实型数(用小数形式或指数形式)
c 输入单个字符
s 输入字符串
2)“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
3)宽度:用十进制整数指定输入的宽度(即字符数)。例如:
输入:12345678
只把12345赋予变量a,其余部分被截去。
输入:12345678
将把1234赋予a,而把5678赋予b。
4) 长度:长度格式符为l和h,l表示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。h表示输入短整型数据。
使用scanf函数还必须注意以下几点:
1)scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2位的实数。
2)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格、TAB或回车作间隔。C编译在碰到空格、TAB、回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。