下面是代码形式的笔记,可以直接存为.c文件进行学习
#include <stdio.h>
int main(void)
{
//printf函数的第一个参数必须是字符串,其后的每个参数应该与前面的占位符一一对应
// 数字的占位符
//对于传入printf的参数,c语言会发生自动类型提升
//在整型中,char,short,int均会变成int,都可以使用%d作为占位符
//比int更长的类型如long,long long需要%ld与%lld来进行占位
//在很多编译器中long类型的长度与int相同,用%d输出也可以得到正确的结果
//对于无符号整型,unsigned char,unsigned short ,unsigned int均使用%u
//unsigned long,unsigned long long 分别使用%lu %llu
//对于浮点数而言,均会提升为double,输出均使用%f
// 转换规范
//事实上占位符严格来讲应该叫做转换规范
// 转换规范以%百分号开始,依次具有下面这些元素:
// 1. 零个或多个标志字符(-,+,0,#)。
// 2. 一个可选的十进制整数常量表示的最小字段宽度。
// 3. 一个可选的用点号表示的精度范围,它的后面可以跟一个十进制整数。
// 4. 一个可选的长度指示符,可以用下列字母组合之一来表示: h、 hh、 l、 LL, z。
// 5. 由单个字符表示的转换操作
//
//下面介绍转换操作
//转换操作由单个字符表示,取自下面这个集合: c、d、e、E、f、i、o、s、u、x、X
// c sizeof(int) 数值对应的ASCII字符
// d sizeof(int) 有符号十进制整型
// e sizeof(double) 双精度浮点型, e计数法表示,e写做小e
// E sizeof(double) 双精度浮点型, e计数法表示,e写做大E
// f sizeof(double) 双精度浮点型,十进制浮点数
// i sizeof(int) 在printf函数中与d相同
// o sizeof(unsigned int) 无符号八进制整型
// s sizeof(char *) 字符串
// u sizeof(unsigned int) 无符号十进制整型
// x sizeof(unsigned int) 无符号十六进制整型,小写字母
// X sizeof(unsigned int) 无符号十六进制整型,大写字母
//当u与d误用时,如果在共有的范围区间内,则可以正确转换,如果不在共有区间,则出错
//
//下面介绍长度指示符
//长度指示符在转换操作前面,用于加宽或缩短转换操作所获取的二进制数据长度。
//增加一个l,可以将转换操作获取的二进制长度升为更高一级的类型长度。
//增加一个h,可以将转换操作获取的二进制长度降为更低一级的类型长度。
//下面是一些示例:
// l d或i sizeof(long)
// ll d或i sizeof(long long)
// l u或o或x或X sizeof(unsigned long)
// ll u或o或x或X sizeof(unsigned long long)
// h d或i sizeof(short)
// hh d或i sizeof(char)
// h u或o或x或X sizeof(unsigned short)
// hh u或o或x或X sizeof(unsigned char)
//sizeof返回的数值是size_t类型的,这是一种整型变量,是已有整型变量的别名。
//size_t变量可能是unsigned int/long/long long的别名,因此使用%d输出不严谨
//长度指示符z用于指示size_z类型的大小,使用%zu可以严谨地转换size_z类型
//
//下面介绍精度范围
//转换操作可以制定一个可选的精度范围,用一个点号以及它后面一个可选的十进制正数表示
// 1. d、 i、 o、 u、 x、 X所打印的最小数字位数,不足将补齐。
// 2. e, E,和f转换中小数点右边的数字位数
//
//下面介绍最小字段宽度
//最小字段宽度指定输出的字符最小为多少字符,如不足,将使用空格补齐到指定的最小宽度
//在左侧补足
//
//下面介绍标志字符
//只有四种标志:-,+,0,#。也可以不写
//标志 0 :使用0而不是空格作为填充字符
//标志 - :打印的字符左对齐
//标志 - 同时导致Flag '0' is ignored when flag '-' is present
int n = 1234;
printf("%-6d\n", n);
printf("%-06d\n", n);
//运行结果如下:
//1234
//1234
//注意,0标志失效,且1234后其实有两个空格
//标志 + :总是产生符号, +(正数)或-(负数)
int m = 1234;
printf("%+6d\n", m);
printf("%+06d\n", m);
//运行结果如下:
// +1234
//+01234
//注意符号需要占据一个长度位置,且与补空格和补0的位置有区别
//标志 # 八进制前加0,十六进制前加0x(大小写要看具体转换操作)
return 0;
}