Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65270
  • 博文数量: 50
  • 博客积分: 2360
  • 博客等级: 大尉
  • 技术积分: 620
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-02 15:59
文章分类

全部博文(50)

文章存档

2011年(1)

2009年(49)

我的朋友

分类: C/C++

2009-09-16 08:28:55

1、printf();

一、%[标志][输出最小宽度][.精度][长度]类型
  其中方括号[]中的项为可选项。
各项的意义介绍如下:
1)        类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:
格式字符        意            义
d        以十进制形式输出带符号整数(正数不输出符号)
o        以八进制形式输出无符号整数(不输出前缀0)
x,X        以十六进制形式输出无符号整数(不输出前缀Ox)
u        以十进制形式输出无符号整数
f        以小数形式输出单、双精度实数
e,E        以指数形式输出单、双精度实数
g,G        以%f或%e中较短的输出宽度输出单、双精度实数
c        输出单个字符
s        输出字符串
2)        标志:标志字符为-、+、#、空格四种,其意义下表所示:
标 志        意         义
-        结果左对齐,右边填空格
+        输出符号(正号或负号)
空格     输出值为正时冠以空格,为负时冠以负号
#        对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点
3)       输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
4)       精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
5.长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。


二、特殊:转义字符
    转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义
转义字符        转义字符的意义             ASCII代码
        \n        回车换行                   10
        \t        横向跳到下一制表位置        9
        \b        退格                        8
        \r        回车但不换行,回到开头     13
        \f        走纸换页                   12
        \\        反斜线符"\"                92
        \'        单引号符                   39
        \”       双引号符                   34
        \a        鸣铃                        7
        \ddd      1~3位八进制数所代表的字符        
        \xhh      1~2位十六进制数所代表的字符        
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母"A" ,\102表示字母"B",\134表示反斜线,\XOA表示回车换行等。


三、举例和说明:
【例3.7】
main()
{
   float a;
   double b;
   a=33333.33333;
   b=33333.33333333333333;
   printf("%f\n%f\n",a,b);
}

?        从本例可以看出,由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。
?        b 是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部分四舍五入。

【例4.4】
main()
{
  int a=15;
  float b=123.1234567;
  double c=12345678.1234567;
  char d='p';
  printf("a=%d,%5d,%o,%x\n",a,a,a,a);
  printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
  printf("c=%lf,%f,%8.4lf\n",c,c,c);
  printf("d=%c,%8c\n",d,d);
}

    本例第七行中以四种格式输出整型变量a的值,其中“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。 第八行中以四种格式输出实型量b的值。其中“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响,输出按照,float只有七位有效。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去并且四舍五入。第九行输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。第十行输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格。使用printf函数时还要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。(1、舍去的只有float格式的七位有效输出。其余TC中全部四舍五入。2、用%e表示输出时,小数点后保留五位,最后位四舍五入。3、其余全部float是六位,但是float型是七位有效。)注:乱用情况没写,大家可以用到时自己来调试,例如:int型确输出%f型等。(float型七位有效最大。double型十六位有效最大。)



四、特例:1、cprintf()可以输入,但是,\n回车时,是回到下一行的接上面一行位置。\r\n可以解决这一问题。
          2、fprintf函数与前面使用的printf 函数的功能相似,都是格式化写函数。两者的区别在于fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。
             这两个函数的调用格式为:fprintf(文件指针,格式字符串,输出表列);
          3、黑方格可以空格,可以0的ASCII;白方格是219的ASCII。
阅读(921) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~