printf详解
转换声明: %后的内容,按照一定的方式输出
整数
%d %i
%o 八进制
%u 无符号十进制
%x %X 大小写的十六进制
浮点数
%a
%e 科学计数法
%g 进行适当匹配,区分有效数值,不会显示多余的0
%f
%lf
字符
%c
字符串
%s
指针
%p
百分号
%%
修饰符
标记
- 右对齐
+ 符合显示
空格 规定最大位数时以空格补全
0 规定最大位数时以空格补全
#
显示格式 %#o %#x
保证打印一个小数点 %#f %#e
防止结果后的0被删除 %#G
数字
最小宽度
%z 代表size_t
例
#include<stdio.h>
#define INTDEMO 250
int main()
{
const double DOUBLEDEMO = 3.14159;
const short SHORTDEMO = 0xFFFF;
printf("%2d\n",INTDEMO); 位数小于本身 ,保留 250
printf("%10d\n",INTDEMO); 位数大于本身,补空格,默认右对齐 250
printf("%-10d\n",INTDEMO); 左对齐,所有空格加在后面 250
printf("%-010d\n",INTDEMO); 左对齐,所有空格加在后面(不会再后面补0)
printf("%f\n",DOUBLEDEMO); 3.141590
printf("%Lf\n",DOUBLEDEMO); 3.141590
printf("%4.2Lf\n",DOUBLEDEMO); 3.14
printf("%10.3Le\n",DOUBLEDEMO); 3.142e+00
printf("%10.3Lf\n",DOUBLEDEMO); 3.142
printf("%010.3Lf\n",DOUBLEDEMO); 000003.142
printf("%+010.3Lf\n",DOUBLEDEMO); +00003.142
printf("%c",SHORTDEMO); 会将short转化成int,会浪费效率
float f_num = 3.0;
double b_num=3.0;
int i_num = 2000000000;
long l_num=1234567890;
printf("%.lg %.lg %.lg %.lg\n",f_num,d_num,i_num,l_num); 正常显示前两个
printf("%ld %ld\n",i_num,l_num); 正显示
printf("%.ld %.ld %.ld %.ld\n",f_num,d_num,i_num,l_num); 全部错误显示
计算机传值是通过栈来传递的,当传递这几个数值后,printf会按照当前给定的类型去栈中取需要取的数据, 32位,64位 , 32位 , 32位,float 4byte,double 8 byte, int , long 4byte ,取数据时,第一次取数据时取4byte解析取错误的值 ,然后又取4byte ,又取4byte。但因为计算机里所有的浮点寄存器都是64位的,计算时会将float转换成double类型,占8byte的空间,所以所有的输出都不正确。
printf 会返回打印了多少字符(不包括换行)
return 0;
}