Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621431
  • 博文数量: 233
  • 博客积分: 2221
  • 博客等级: 大尉
  • 技术积分: 3184
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-16 14:01
个人简介

瓜瓜派的瓜瓜

文章分类

全部博文(233)

文章存档

2013年(28)

2012年(197)

2011年(8)

分类: C/C++

2012-01-09 16:29:18

使用manpages(man 3 printf)查看到的printf函数如下定义:
#include
int printf(const char *format,...);
int fprintf(FILE *stream,const char *format,...);
int sprintf(char *str,const char *format,...);
int snprintf(char *str,size_t size,const char *format,...);
上面这几个函数都很好用,而且也很好理解。对于格式化输出字符串非常有用,比如Linux下面的rpc编程,函数调用只能有一个参数,那么要传递多个参数呢?当然是使用字符串了,将你定义的字符串按约定格式输出到一个buffer字符串中,然后传递就可以了。
    下面主要讲讲格式化输出中的格式!
----------------------------------------------------------------------------------
基本格式    含义
%d        整型十进制
%u        无符号整型(对于八进制,十六进制来说没有符号区别)
%o        八进制
%x/%X    小写/大写的十六进制
%c        字符
%s        字符串
%f        浮点数,不使用科学表示法
%g/%G    六位有效数字表示法,当太大或太小时自动使用科学表示法
%e/%E    科学表示法,六位有效数字
----------------------------------------------------------------------------------
修饰符        含义
l            修饰整型数据,表示long,如%ld,%lu,%lo,%lx
宽度修饰符    最小输出宽第,从来不会截断输出如:%10d
精度修饰符    对于整型,如果不够大,那么会在前面补0,对于字符
            串,会补空格,对于浮点数%f,%e表示小数点后多少
            位。
---------------------------------------------------------------------------------
标志            含义
‘-’            左对齐
‘+’            输出正负号,当然是对于十进制数来说的
‘ ’            和‘+’类似,但是正数
---------------------------------------------------------------------------------
可变域宽和精度
    当想要打印出指定宽度的数字或字符串时,就可以指定域宽,如:
#define    NAMESIZE    14
char name[NAMESIZE];
printf("%NAMESIZEs\n",name);
但是:上面的语法有错误,编译的时候会提示错误的类型%N,因为宏由预编译来处理,而预编译不会进入到字符串内部!
当想要打印指定的字符串宽度怎么办呢?使用宽度和精度修饰符“*”。
printf("%*.*s\n",14,14,name);
printf("%*.*s\n",14,5,name);    //只打印出5个字符,前面补空格
----------------------------------------------------------------------------------
ANSI C新增的修饰符%n
    %n将打印了的字符数输出到一个变量中,如
printf("hello%%n%n",&n);
printf("n=%d\n",n);    //将打印出7
阅读(857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~