(本人小白一枚,以下内容为学习记录,若有错误或表述问题,希望能得到指正)
占位符是一种特殊字符或字符串,用于表示将来要填充的值的位置,通常用于字符串替换或格式化。它们是在程序运行时动态生成的,以便将实际值插入到占位符的位置。
占位符可以在代码运行时为输入的数据进行占位,不同类型的占位有不同的格式,帮助程序员控制输出的格式,使代码更加简洁、易读。
其中,不同的占位符代表不同的数据类型
种类
- %d : 整数(decimal-十进制)
- %ld :长整型
- %u :无符号整数(unsigned)
- %f : 浮点数(float)
- %e :指数形式输出实数(指定浮点类型,%e对应float,%E对应double)
- %g :自动选择%f、%e输出实数(不输出无意义的0)
- %c : 单个字符(character)
- %s : 字符串(string)
- %p : 指针的值(pointer)
- %x : 十六进制整数(小写字母)
- %X :十六进制整数(大写字母)
- %o : 八进制数(octal)
- %n :输出已经输出的字符数
- %%:输出百分号
下面就个别类型举一些例子。
例1、%e
该占位符用来以指数形式输出实数,意思即用科学计数法,如将500写成5*(10)^2。
int main()
{
printf("%e", 500.0);
return 0;
}
显示结果为5.000000e+02,意思是5*10^2。
例2、%c
如果使用char类型变量,该变量在内存中以ASCII值形式储存,其运算即是对ASCII值进行运算,运算结果在%c的前提下转为字符,看一下下面的代码
int main()
{
char b = 0 ;
scanf("%c", &b);
printf("%c\n", b);
printf("%c\n", b+1);
return 0;
}
在scanf输入字符9,在内存中会对应到ASCII值57,57+1=58,而58对应的字符却是 : ,因而b+1的结果不是10。
例3、%s
字符串可以看作字符的数组,每个字符相互独立。
int main()
{
char b[10] = { '1','0','0','0' };
printf("%s\n", b);
char c[10] = "1000";
printf("%s\n", c);
char d[4] = "1000";
printf("%s\n", d);
return 0;
}
由于变量d的空间全被使用,没有多余空间交给\0(结束标志),因此出现错误。
例4、%c与%s
给char类型变量赋值,该值根据使用的占位符不同会输出不同的结果。
字符与ASCII值能通过%c、%d相互转换输出(需要注意字符9和数字9是两个不同概念)
int main()
{
char a[10] = { 0 };
a[1] = 36;
printf("%c\n", a[1]);
printf("%d\n", a[1]);
char b = 36;
printf("\n%d\n", b + 1);
printf("%c\n", b + 1);
char c = '9';
printf("\n%c\n", c+1);
printf("%d\n", c+1);
return 0;
}