C语言printf语法

1.调用格式为  printf("<格式化字符串>", <参量表>); 
  其中格式化字符串包括两部分内容一部分是正常字符这些字符将按原样输出另一部分是格式化规定字符"%"开始后跟一个或几个规定字符用来确定输出内容格式。参量表是需要输出的一系列参数其个数必须与格式化字符串所说明的输出参数个数一样多各参数之间用","分开且顺序一一对应否则将会出现意想不到的错误。

2.格式化字符

%d 十进制有符号整数 
%u 
十进制无符号整数 
%f 
浮点数 
%s 
字符串 
%c 
单个字符 
%p 
指针的值 
%e 
指数形式的浮点数 
%x, %X 
无符号以十六进制表示的整数 
%0 
无符号以八进制表示的整数 
%g 
自动选择合适的表示法 
说明
(1). 
可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数不够3位右对齐。%9.2f 表示输出场宽为9的浮点数其中小数位为2, 整数位为6, 小数点占一位不够9位右对齐。%8s 表示输出8个字符的字符串不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽将按其实际长度输出。 但对浮点数若整数部分位数超过了说明的整数位宽度将按实际整数位输出若小数部分位数超过了说明的小数位宽度则按说明的宽度以四舍五入输出。另若想在输出值前加一些0, 就应在场宽项前加个0 例如: %04d 表示在输出一个小于4位的数值时将在前面补0使其总宽度4位。如果用浮点数表示字符或整型量的输出格式小数点后的数字代表最大宽度小数点前的数字代表最小宽度。例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 9个字符以后的内容将被删除。 
(2). 
可以在"%"和字母之间加小写字母l, 表示输出的是长型数。例如: %ld 表示输出long整数, %lf 表示输出double浮点数。
(3). 
可以控制输出左对齐或右对齐即在"%"和字母之间加入一个"-" 号可说明输出为左对齐否则为右对齐。例如: %-7d 表示输出7位整数左对齐,%-10s 表示输出10个字符左对齐。


3. 一些特殊规定字符 
换行
f
清屏并换页 
回车 
Tab
 
xhh
表示一个ASCII码用16进表示,
其中hh1216进制数

复制代码
int a=1234;
printf(
"a=%d ",a); //a=1234
printf("a=%2d ",a); //a=1234 超过2位,按实际输出
printf("a=%6d ",a); //a= 1234 不足6位,右对齐
printf("a=%06d ",a); //a=001234 不足6位,前面补0
printf("a=%-6d ",a); //a=1234 '-'左对齐


int* i=&a;
printf(
"i=%p ",i); //i=0012FF44 输出指针的值,即地址

float m=8888.8888; //float 单精度型浮点数 有效位数是6位或7位,根据不同的浮点数会有不同
float m1=8888.8888f; //在后面加上f或F,编译警告:truncation from'const double'to 'float'
//编译器默认浮点数为double
float m2=8888.888f;
double n=8888.8888;
double n1=8888888888.88888888; //double 双精度型浮点数 有效位数是15位
printf("m=%f m1=%f m2=%f n=%lf n1=%f ",m,m1,m2,n,n1); // m=8888.888672
// m1=8888.888672
// m2=8888.887695
// n=8888.888800
// n1=8888888888.888889
//%f的默认输出小数位数就是6位不管有没有l
/*printf的%f说明符的确既可以输出float型又可以输出 double型。 根据"默认参数提升"规则(在printf这样的函数的
可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到
双精度数。严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。
*/

printf(
"m4=%4.2f ",m); //宽度总共4位,小数两位,小数点一位,整数一位,这里整数超过宽度规定,按实际整数位输出
printf("m5=%9.6f ",m); //浮点数小数部分不足6位,右对齐
printf("m6=%9.2f ",m); //整数部分不足6位,右对齐;小数部分超过2位,四舍五入

char c[20]="Hello,world!";
printf(
"c=%s ",c);
printf(
"c=%6.9s ",c); //c=Hello,wor 6.9s表示输出一个长度长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。
复制代码

  转载自:http://www.cnblogs.com/shiney/archive/2011/08/19/2145921.html

例子:

#include<cstdio>
int main()
{
    
//for int
    int i=30122121;
    long i2=309095024l;
    short i3=30;
    unsigned i4=2123453;
    printf("%d,%o,%x,%X,%ld,%hd,%u ",i,i,i,i,i2,i3,i4);//如果是:%l,%h,则输不出结果 
    printf("%d,%ld ",i,i2);//
试验不出%ld和%d之间的差别,因为long是4bytes
    printf("%hd,%hd ",i,i3);//试验了%hd和%d之间的差别,因为short是2bytes

    //for string and char
    char ch1="d";
    unsigned char ch2=160;
    char *str="Hello everyone!";
    printf("%c,%u,%s ",ch1,ch2,str
);//unsigned char超过128的没有字符对应
   
    //for float and double,unsigned and signed can not be used with double and float
    float fl=2.566545445F;//or 2.566545445f
    double dl=265.5651445;
    long double dl2=2.5654441454;

    //%g没有e格式,默认6位包括小数点前面的数,
    //%f没有e格式,默认6位仅只小数点后面包含6位
    //%e采用e格式,默认6位为转化后的小数点后面的6位
    printf("%f,%e,%g,%.7f ",fl,dl,dl,dl);
    printf("%f,%E,%G,%f ",fl,dl,dl,dl);//%F is wrong
    printf("%.8f,%.10e ",fl,dl);
    printf("%.8e,%.10f ",fl,dl);

    //for point 
    int *iP=&i;
    char *iP1=new char;
    void *iP2;//dangerous!
    printf("%p,%p,%p ",iP,iP1,iP2);
    
    
//其他知识:负号,表示左对齐(默认是右对齐);%6.3,6表示宽度,3表示精度
    char *s="Hello world!";
    printf(":%s: :%10s: :%.10s: :%-10s: :%.15s: :%-15s: :%15.10s: :%-15.10s: ",
        s,s,s,s,s,s,s,s);
    double ddd=563.908556444;
    printf(":%g: :%10g: :%.10g: :%-10g: :%.15g: :%-15g: :%15.10g: :%-15.10g: ",
        ddd,ddd,ddd,ddd,ddd,ddd,ddd,ddd);

    //还有一个特殊的格式%*.* ,这两个星号的值分别由第二个和第三个参数的值指定
    printf("%.*s ", 8, "abcdefgggggg");
    printf("%*.*f   ", 3,3, 1.25456f);
 
    return 0;
}
原文地址:https://www.cnblogs.com/cc-Cheng/p/3312266.html