1.转换说明符 %a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99) %c 字符 %d 有符号十进制整数 %f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零”0” %i 有符号十进制整数(与%d相同) %u 无符号十进制整数 %o 八进制整数 e.g. 0123 %x(%X) 十六进制整数
由高手指点 对于m.n的格式还可以用如下方法表示(例) char ch[20]; PRintf(“%*.*s/n”,m,n,ch);
今天()又看到一种输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:
int slen;
printf(“hello world%n”, &slen);
执行后变量被赋值为11
另外:
1、格式输出函数的一般形式
函数原型: int printf(char * format[,argument,…]); 函数功能:按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数,若出错,则返回负数。 它使用的一般形式为: printf("格式控制字符串",输出项列表); 语句中“输出项列表”列出要输出的表达式(如常量、变量、运算符表达式、函数返回值等),它可以是0个、一个或多个,每个输出项之间用逗号(,)分隔。输出的数据可以是整数、实数、字符和字符串。 "格式控制字符串"必须用英文的双引号括起来,它的作用是 控制输出项的格式和输出一些提示信息,例如 int i=97; printf("i=%d,%c/n",i,i); 输出结果为:i=97,a 语句“printf("i=%d,%c/n",i,i);”中的两个输出项都是变量i,但却以不同的格式输出,一个输出整型数97,另一个输出的却是字符a,其格式分别由“%d”与“%c”来控制。 语句“printf("i=%d,%c/n",i,i);”的格式控制字符串中“i=”是普通字符,他将照原样输出;“%d”与“%c”是格式控制符;"/n"是转义字符,它的作用是换行。2、格式控制
格式控制由格式控制字符串实现。格式控制字符串由3部分组成:普通字符、转义字符、输出项格式说明。 (1)普通字符。普通字符在输出时,按原样输出,主要用于输出提示信息。 (2)转义字符。转义字符指明特定的操作,如"/n"表示换行,"/t"表示水平制表等。 (3)格式说明部分由“%”和“格式字符串”组成,他表示按规定的格式输出数据。 格式说明的形式为: %[flags][width][.prec][F|N|h|I][type] 各部分说明如下:“[]”表示该项为可选项,即可有可无,如 printf(“%d”,100); flags为可选择的标志字符,常用的标志字符有: - ——左对齐输出,默认为右对齐输出; + ——正数输出加号(+),负数输出减号(-); 空格 ——正数输出空格代替加号(+),负数输出减号(-)。 width为可选择的宽度指示符。 用十进制正整数表示设置输出值得最少字符个数。不足则补空格,多出则按实际输出,默认按实际输出,例如: printf(“%8d/n”,100); printf(“%6d/n”,100); printf(“%-8d/n”,100); printf(“%+8/n”,100); 输出结果为:└┘└┘└┘└┘└┘100 └┘└┘└┘100 100└┘└┘└┘└┘└┘ └┘└┘└┘└┘+100 [.prec]为可选的精度指示符 用“小数点”加“十进制正整数”表示,对“整数”、“实数”和“字符串”的输出有如下功能:对“整数”,表示至少要输出的数字个数,不足补数字0,多则原样输出;对“实数”,表示小数点后至多输出的数字个数,不足则补数字0,多则做舍入处理;对“字符串”,表示最多输出的字符个数,不足补空格,多则丢弃。 例如:printf(“%8.2f/n”,3.14159); printf(“%8.5f/n”,3.14159); 输出结果为:└┘└┘└┘└┘3.14 └┘3.14159 [F|N|h|I]为可选的输出长度修饰符,其功能如下: F ——输出远指针存放的地址; N——输出近指针存放的地址; h——输出短整型数据的值; l——输出长整型或双精度型数据的值。 例如:long n=40000; printf(“%8ld/n”,n);/因为200*200是长整型数据/ type为可选的格式字符,用来进行格式转换。
int main() { //for int int i=30122121; long i2=309095024l; short i3=30; unsigned i4=2123453; printf(“%d,%o,%x,%X,%ld,%hd,%u/n”,i,i,i,i,i2,i3,i4);//如果是:%l,%h,则输不出结果 printf(“%d,%ld/n”,i,i2);//试验不出%ld和%d之间的差别,因为long是4bytes printf(“%hd,%hd/n/n/n”,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/n/n/n”,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/n”,fl,dl,dl,dl); printf(“%f,%E,%G,%f/n”,fl,dl,dl,dl);//%F is wrong printf(“%.8f,%.10e/n”,fl,dl); printf(“%.8e,%.10f/n/n/n”,fl,dl); //for point int *ip=&i; char *iP1=new char; void *iP2;//dangerous! printf(“%p,%p,%p/n/n/n”,iP,iP1,iP2);
//其他知识:负号,表示左对齐(默认是右对齐);%6.3,6表示宽度,3表示精度 char *s=”Hello world!”; printf(“:%s: /n:%10s: /n:%.10s: /n:%-10s: /n:%.15s: /n:%-15s: /n:%15.10s: /n:%-15.10s:/n/n/n”, s,s,s,s,s,s,s,s); double ddd=563.908556444; printf(“:%g: /n:%10g: /n:%.10g: /n:%-10g: /n:%.15g: /n:%-15g: /n:%15.10g: /n:%-15.10g:/n/n/n”, ddd,ddd,ddd,ddd,ddd,ddd,ddd,ddd); //还有一个特殊的格式%. ,这两个星号的值分别由第二个和第三个参数的值指定 printf(“%.*s /n”, 8, “abcdefgggggg”); printf(“%*.*f /n”, 3,3, 1.25456f);
return 0; }
新闻热点
疑难解答