printf "%.*s"
2012-12-04 17:35
260 查看
ref : http://www.cnblogs.com/yuaqua/archive/2011/10/21/2219856.html
小数点.后“*”表示输出位数,具体的数据来自参数表
printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”。
同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。
输出结果为:
this is te
----------this is te//-代表空格
15 10 //输入
-----this is te
注:printf的一般形式为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格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面提供变量给“*”。
同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。
#include <cstdio> #include <iostream> int main() { char *s = "this is test example"; int a,b; printf("%.*s\n", 10, s);//这里的常量10就是给*号的,你也可以用一个变量来控制宽度 printf("%*.*s\n", 20, 10, s);//常量20控制输出所占位宽,也可以用一个变量控制 std::cin>>a>>b; //输入15 10 printf("%*.*s\n", a, b, s);//输出为:-----this is te std::cin.get(); std::cin.ignore();//暂停程序执行 }
输出结果为:
this is te
----------this is te//-代表空格
15 10 //输入
-----this is te
注:printf的一般形式为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 表示按长整型量输出。
相关文章推荐
- 结果是:空格空格3.0e+001,我不明白这加001是怎么回事啊?还有这个printf("%e\n",30.14);结果是3.014000e+001这是怎么算出来的?谁帮我讲下方法?
- printf("%d,%d,%d/n",a,++a,a++)
- void Traverse()//while( walker!=rear) { printf("%c",buff[walker]); walker=(walker+1)%10;
- printf("\033[1;33m Hello World. \033[0m \n");有趣的串口之超级终端的玩法
- printf("%*.*s\n")
- char c=128;printf("%d",c);问题
- C语言初探 之 printf压栈顺序(printf("%d %d %d %d %d %d\n",a++, ++a, a++, ++a, a++, ++a ))
- printf "%.*s"
- C语言输出函数printf("%AB", v);
- C语言:模拟实现printf,要求功能:print(&quot;ccc\ts!&quot;,&#39;b&#39;,&#39;i&#39;,&#39;t&#39;,&quot;welcome to you&quot;);
- printf("%d",5.01)和printf("%f",5)的输出结果
- 深入剖析printf函数(上):如何不借助第三方库在屏幕上输出"Hello World"?
- printf("%f",10/3); 答案是多少?----不定参数
- gets() scanf(&quot;%s&quot;) puts() printf(&quot;%s&quot;) 的区别
- 交换两个数的值(使用中间变量和不使用中间变量的情况void main() { int a=1,b=3; //swap1(&a,&b); swap2(&a,&b); printf("a=%d, b=%)
- printf("%d",5.01)和printf("%f",5)的输出结果
- 关于 printf("%d",5.01)的输出
- printf("%*s);
- printf(&unix["\021%siz\012\0"].....
- printf("%x,%x",ptr1[-1],*ptr2)的思考