|
1. 基本格式化输出符号
符号 含义
%c 字符
%d 十进制整数
%e 浮点数,指数e的形式
%s 字符串
%E 浮点数,指数E的形式
%u 无符号十进制整数
%f 浮点数,小数点形式
%g 输出%f与%e较短者
%o 无符号八进制整数
%G 输出%F与%E较短者
%x 无符号十六进制整数,以0~f表示
%X 无符号十六进制整数,以0~F表示
%l 长整型,加在d,o,u,x,X之前,如%ld(注意%l是英文字母l,不是数字1)
1.1 %g详解
当一个数字的绝对值很小的时候,要表示这个数字所需要的字符数目就会多到让人难以接受。举例而言,如果我们把 π*10^-10 写作 0.00000000000314159 就会显得非常丑陋不雅,反之,如果我们写作 3.14159e-10,就不但简洁而且易读好懂。
当指数是 -4 时,这两种表现形式大小相同。对于比较小的数值,除非该数的指数小于或者等于-5,%g 才会采用科学技术发来表示,即,以 %e 的格式进行输出。
示例程序:
[C++] 纯文本查看 复制代码 printf("%g\n", 0.00031415926235);
0.000314159
printf("%g\n", 0.000000031415926235);
3.14159e-008
2. printf函数解析函数原型: [C++] 纯文本查看 复制代码 int printf(const char *format,[argument]);
format 参数输出的格式,定义格式为: [C++] 纯文本查看 复制代码 %[flags][width][.perc] [F|N|h|l]type
2.1 type 含义如下:
符号 含义
d 有符号10进制整数
i 有符号10进制整数
o 有符号8进制整数
u 无符号10进制整数
x 无符号的16进制数字,并以小写abcdef表示
X 无符号的16进制数字,并以大写ABCDEF表示
F /f 浮点数
E /e 用科学表示格式的浮点数
g 如果数据长度较小,用 %f 表示,如果较大,用 %e 表示
c 单个字符
s 字符串
% 显示百分号本身
p 显示一个指针,near指针表示为:XXXX ;far 指针表示为:XXXX:YYYY
n 相连参量应是一个指针,其中存放已写字符的个数
2.1.1 %n 详解
[C++] 纯文本查看 复制代码 #include "stdio.h"
int main(int argc,char *argv[])
{
char a[20];
int x,t;
double y;
scanf("%s%n",a,&t);//把接收的字符个数赋给t
printf("%s-->You have just entered %d character(s).\n",a,t);
scanf("%d%n",&x,&t);//把接收整型数的字符个数赋给t
printf("%d-->You have just entered %d character(s).\n",x,t);
scanf("%lf%n",&y,&t);//把接收浮点数的字符个数赋给t
printf("%g-->You have just entered %d character(s).\n",y,t);
return 0;
}
[C++] 纯文本查看 复制代码 lh@ubuntu:~/libingxuan$ ./a.out
1234 //这里是4个空格接着1234\n,scanf会统计先导的空白符号,但是不会写入文件,所以这里是8个
1234-->You have just entered 8 character(s).
123 //此时缓冲区的状态是\n1234\n
123-->You have just entered 4 character(s).
1.314
1.314-->You have just entered 6 character(s).
在printf中的用法与上述类似
[C++] 纯文本查看 复制代码 #include <stdio.h>
int main()
{
int x;printf("\n\n\n\n12345%n\n",&x);
printf("%d\n",x);
}
2.2 flags 规定输出格式,取值和含义如下:
符号 含义
无 右对齐,左边填充空格
- 左对齐,右边填充空格
+ 在数字前增加符号 + 或 -
# 主要针对8进制、16进制的输出,type=o,x,X时,分别在数值前增加’0’,“0x”,“0X”
0n(n=1,2,3…) 宽度至少为 n 位,不够左边以 0 填充 * 格式列表中
2.3 width
width 表示宽度,宽度不够的会以空格填充 ,超出限定长处的部分不会显示
2.4 prec 用于控制小数点后面的位数,取值和含义如下:
符号 含义
无 按缺省精度显示
0 不显示小数点
n(n=1,2,3…) 表示要保留小数位数
2.5 [F|N|h|l] 表示指针是否是远指针或整数是否是长整数
F 远指针
n 近指针
h短整数或单精度浮点数
l 长整数或双精度浮点数
2.5.1 近指针、远指针解释
近指针、远指针、巨指针是段寻址的 16 bit 处理器的产物(如果处理器是 16 位 的,但是不采用段寻址的话,也不存在近指针、远指针、巨指针的概念),当前普通PC所使用的 32 bit 处理器(80386以上)一般运行在保护模式下的,指针都是 32 位 的,可平滑地址,已经不分远、近指针了。
%s 是接受字符串
%c 是接受所有类型的单个字符
[C++] 纯文本查看 复制代码 char a;
char b[20];
scanf("%c",&a);//只能输入一个字符;
sanf("%s",b);//可以输入一串不超过20字符的字符串,**这里不能有&符号**
这里不能有&符号!
%c 对应类型为char, %s对应类型为char * , 即字符串.
%s 本身会跳过空白符,并且不检查长度,实际上是遇到空白符就停止
但是%c不会跳过,甚至回车键都会被接受,有时会造成程序无法输入直接结束的现象,其实就是%c接受了回车键
%d 输出一个整型数
[C++] 纯文本查看 复制代码 printf("%d",a)
%d\n 输出整型并换行
[C++] 纯文本查看 复制代码 printf("%d\n",a)
|
|