字面意义,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号,广泛用于计算机中各类文档的编辑。
格式占位符(%)是在C/C++语言中格式输入函数,如 scanf、printf 等函数中使用。其意义就是起到格式占位的意思,表示在该位置有输入或者输出。
占位符是 C语言中非常有用的一种工具,可以通过指定不同的占位符来格式化输出不同类型的数据。我们可以使用常见的占位符来输出整数、浮点数、字符、字符串、指针等类型的数据,也可以使用修饰符来控制输出的格式,例如左对齐、填充 0、控制小数位数、控制输出宽度等。熟练掌握占位符和修饰符的使用,对于编写高效、清晰的代码非常重要。
以下这些都是 10 进制数
整型:
%d/%D ---- 以 int 类型的方式显示数据
%hd ---- 以 short 类型的方式显示数据
%hhd ---- 以 signed char 整形类型的方式显示数据
%ld ---- 以 long 类型方式显示
%lld ---- 以 long long 类型方式显示
%u ---- 以 unsigned int 类型的方式显示数据
%hi ---- 为有符号的16位整型数(short);
%hu ---- 以 unsigned short 类型的方式显示数据
%hhu ---- 以 unsigned char 整形类型的方式显示数据
%qi ---- 为有符号的64位整型数(long long);
%qu ---- 为无符号的64位整型数(unsigned long long);
%lu ---- 以 unsigned long 类型方式显示
%llu ---- 以 unsigned long long 类型方式显示
浮点:
%f ---- 以 float 方式显示 (保留6位小数) 12.500000
%F ---- 为64位的浮点数(double)(保留6位小数)
%lf ---- 以 double 方式显示 (保留6位小数)
%.2f ---- 以float型进行打印 -> 保留2位小数
%e/%E ---- 以 指数方式显示 -> 科学计数
%g/%G ---- 以 合适的方式显示 -> 小数或科学计数
%a,%A ---- 读入一个浮点值(仅C99有效)
字符:
%c/%C ---- 以char型进行打印 ---> 针对字符型
%s/%S ---- 以char型进程打印 ---> 针对字符串
详细描述:
%c ---- 为8位的无符号字符%c(unsigned char),通过打印NSLog()将其作为一个ASCII字符,或者,不是一个ASCII字符,八进制格式\ddd或统一标准的字符编码的十六进制格式\udddd,在这里d是一个数字;
%C ---- 为16位Unicode字符%C(unichar),通过打印NSLog()将其作为一个ASCII字符,或者,不是一个ASCII字符,八进制格式\ddd或统一标准的字符编码的十六进制格式\\udddd,在这里d是一个数字;
%s ---- 对于无符号字符数组空终止,%s系统中解释其输入编码,而不是别的,如utf-8;
%S ---- 空终止一系列的16位Unicode字符;
例子:printf("%d %d %d %f %c\n",a,b,c,d,e,f);//format中拥有多个标志位:需给予同等的变参个数,且数据类型要匹配。
以下是八进制和十六进制
%i ---- 读入十进制,八进制,十六进制整数
%o,%O ---- 为32位的无符号整数(unsigned int),打印八进制数;
%lo ---- 八进制 long int类型
%llo ---- 八进制 long long int类型
%lx ---- 十六进制 long int类型
%llx ---- 十六进制 long long int型
%llu ---- unsigned long long int型
%Le ---- 科学计数法表示的long double类型浮点
%Lf ---- long double类型浮点
%x ---- 为32位的无符号整型数(unsigned int),打印使用数字0-9的十六进制,小写a-f;
%X ---- 为32位的无符号整型数(unsigned int),打印使用数字0-9的十六进制,大写A-F;
%x/%X ---- 以十六进制的格式进行打印 --->不带开头
%#x ---- 以十六进制的格式进行打印 ---> 带开头
%qx ---- 为无符号64位整数(unsigned long long),打印使用数字0-9的十六进制,小写a-f;
%qX ---- 为无符号64位整数(unsigned long long),打印使用数字0-9的十六进制,大写A-F;
%#o ---- 八进制显示
%#x/%#X ---- 十六进制显示
%n ---- 已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。
%p ---- 打印地址 -> 读入一个指针 空指针(无效*),打印十六进制的数字0-9和小写a-f,前缀为0x
%L ---- 在明确规定的长度下,进行修正,下面的一批数据a,A,e,E,f,F,g,G应用于双精度长整型的参数
%[] ---- 扫描字符集合
%% ---- 读 % 符号
%z ---- 修改说明在%z长度以下d,i,o,u,x,X适用于某一指定类型的转换或者适用于一定尺寸的整数类型的参数;
%zd ---- size_t类型
%t ---- 修改说明在%t长度以下d,i,o,u,x,X适用于某一指定类型或一定尺寸的整数类型的转换的参数;
%j ---- 修改说明在%j长度以下d,i,o,u,x,X适用于某一指定类型或一定尺寸的整数类型的转换的参数
%@ ---- 对象 -> 关于这个后面有详解
另外,printf 别样显示:
%md ---- m表示显示的宽度
m是个正数 ,右对齐 (数据在右边)
m是个负数 ,左对齐 (数据左边)
如果m的值小于 最小显示的宽度 ,则m无效
例子:
int a = 10;
printf("%5d\n", a);
%m.nf ---- m表示显示的宽度(小数点算一个位置)
m是个正数 ,右对齐 (数据在右边)
m是个负数 ,左对齐 (数据左边)
如果m的值小于 最小显示的宽度 ,则m无效
n 代表保留的 小数位数
尽管有那么多的占位符,但是好像没有发现BOOL型的数据的占位符,看了一下别人是怎么解决这个问题的
BOOL studyBool = YES;
NSLog(@"打印BOOL型数据%@",studyBool?@"YES":@"NO");//打印BOOL型数据YES
NSLog(@"打印BOOL型数据%d",studyBool);//打印BOOL型数据1
BOOL alsoBool = NO;
NSLog(@"打印BOOL型数据%@",alsoBool?@"YES":@"NO");//打印BOOL型数据NO
NSLog(@"打印BOOL型数据%d",alsoBool);//打印BOOL型数据0
%@ ---- Objective-C对象,印有字符串返回descriptionWithLocale:如果于的话,或描述相反.CFTypeRef工作对象,返回的结果的CFCopyDescription功能.(这个翻译有问题建议按照自己的理解方式理解)。
占位符的高级用法
动态宽度和精度:
可以使用*符号动态指定宽度和精度,这通常在函数中传递格式化参数时非常有用。
int main() {
int width = 10;
double pi = 3.14159;
printf("动态宽度:%*f\n", width, pi);
return 0;
}
组合使用:占位符可以组合使用,以实现复杂的格式化输出。
例如,可以同时指定宽度、精度和对齐方式。
int main() {
double pi = 3.14159;
printf("宽度为10,精度为2,左对齐:%-10.2f\n", pi);
return 0;
}
占位符是C语言中非常重要的一个工具,它可以帮助我们实现格式化输出、字符串处理和文件输出。在使用占位符时,我们需要注意类型匹配、溢出和截断以及安全性问题。希望大家能够全面理解和掌握C语言中的占位符,并在实际编程中灵活运用这一工具。
以上,是关于【C语言】中占位符的介绍。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!