笔记:
%o,八进制打印
%x, 十六进制,a-e代表11到15
%X,十六进制,A-E代表11到15
%i , 有符号十进制,同%d
打印不同数据类型时的格式:
C/C++ %d等简单格式类型总结
- 博客分类:
- C/C++
关于这部分的内容,自己每次用的时候都是去翻书,或者上网查,但是一直没有发现一篇文章很系统的介绍这一部分的内容,直到读完了《C陷阱与缺陷》,在附录中总结了格式化输入输出的符号,及其修饰符,今天暂且根据该书整理了简单格式类型部分,后续的修饰符会另写总结,本文旨在便于笔者查阅和方便各位博友。
简单格式类型:
格式字符串中的每个格式项都是由一个%符号打头,后面接一个称为格式码的字符,格式码指明了格式转换的类型。
首先最常用的就是%d, 以10进制打印一个整数。例如:
C代码
- Printf(“2 + 2 = %d\n”, 2 + 2);
将打印出Dos代码
- 2 + 2 = 4.
%u格式项与%d类似,不同之处是%u打印无符号10进制整数。例如:
C代码
- Printf(“%u\n”,-37);
将打印出4294967259.
%o, %x, %X用于打印8进制或者16进制的整数。
%x, 用小写字母a, b, c, d, e, f来表示10到15的数位值
%X, 用大写字母A, B, C, D, E, F来表示10到15的数位值。
例如:
C代码
- int n = 108;
- printf( “%d decimal = %o octal = %x hex = %X HEX \n”, n, n, n, n);
将打印出:
Dos代码
- 108 decimal = 154 octal = 6c hex = 6C HEX
%s
用于打印一个字符串:与之对应的参数应该是一个字符指针,指向待输出的字符串首字符的地址,知道遇见一个空字符’\0’才终止。%s格式项所对应输出的字符串必须以一个空字符’\0’作为结束标志。 因为printf函数要一次来定位一个字符串何时结束。如果与%s对应的字符串并不是以空字符’\0’作为结束标志,那么printf函数将不断打印出其后面的字符,直到在内存中某处找到一个空字符’\0’为止。这时输出就可能相当的长。
例如:
C代码
- Printf (“There %s %d item%s in the list. \n”, n!=1? “are”: “is”, n, n!=1? “s”: “”);
如果n为37,输出将是:
Dos代码
- There are 37 items in the list.
如果n为1, 输出将是
Dos代码
- There is 1 item in the list.
注:
C代码
- Printf(s);
与
C代码
- Printf(”%s”, s);
两者含义并不相同,前者把字符串s中的任何%字符视为一个格式项的标志,其后的字符会被视为格式码,如果除%%之外的任何格式码在字符串中出现,而后面有没有对应的参数,将会带来麻烦。而后者将会打印出任何一空字符结尾的字符串。
NULL指针并不指向任何实际的内存位置,因此肯定也不可能指向一个字符串。因此,
Printf(“%s \n”, NULL);
的结果将难以预料。
%c
用于打印单个字符:
C代码
- Printf(“%c”, c);
等效于
Putchar(c);
但是前者的适应性和灵活性更好,能够把字符c的值嵌入某个更大的上下文中。与%c格式项对应的参数是一个为了打印输出而被转换为字符型的整型值。例如:
C代码
- Printf( “The decimal equivalent of ‘%c’ is %d \n”, ‘*’, ‘*’);
将打印出:
Dos代码
- The decimal equivalent of ‘*’ is 42.
%g, %e, %f这3个格式项用于打印浮点值。
%g
去掉数字尾缀的0,保留6位有效数字。因此,
C代码
- Printf(“%g %g %g %g %g %g\n”, 1/1.0, 1/2.0, 1/3.0, 2/3.0, 1/4.0, 0.0);
将打印出
1 0.5 0.333333 0.666667(四舍五入) 0.25 0
如果一个数的绝对值大于999999, 按%g的格式打印这个字符,会采用科学计数法来打印,例如:
C代码
- Printf(“%g\n”, 123456789.0);
将打印出:
1.23457e+08
对于很小的数值,除非该数的指数小于或等于-5, %g格式项才会采用科学计数法表示。因此:
C代码
- Printf(“%g %g %g\n”, 3.14159e-3, 3.14159e-4, 3.14159e-5);
将打印出:
0.00314159 0.000314159 3.14159e-05
%e和%f格式则在用于打印浮点数是,分别要求一律显式地使用指数形式和禁止使用指数来表示浮点数。例如:
C代码
- Printf( “%e %f”, 123456789, 123456789)
将打印出:
Dos代码
- 1.234567e+08 123456789.000000
注:
%e和%f对有效数字的保留是小数点后6位有效数字,跟%g的总共6位有效数字不同。
%E和%G格式项跟对应的%e和%g在行为上基本相同,但是科学计数法的e改用E。
%%格式用于打印一个%符号。
如有错误,请留言指正,谢谢。