%是我们在初学阶段打印中必不可少的符号,像是%d打印十进制整形,%u打印无符号十进制整型,%p打印地址。。。
所以我们在想打印不同类型的话该怎么选择。。
首先,比较常用的%d,是被用来打印十进制整形的。%u打印无符号十进制整型,%X/x都是用来打印16进制转化后的无符号整型(这里的x不包含16进制写法下的0x,如果想要显示0x,要在%和X/x中间添加#,x的大小写仅与输出的16进制中的字母大小写相关。),%o是用来打印8进制的无符号整型。%c是用来打印字符,也可以把输入的数字按照ASCII码相应转换为对应的字符,下方代码中的65的ASCII值为字符A。
#include <stdio.h>
int main() {
char ch = 'w';
int count = -1234;
// 显示整数
printf("十进制整型 %d\n无符号的十进制整型 %u\n", count, count);
printf("无前缀0x的十六进制 %X \n有前缀的16进制型 %#x \n无前缀的8进制 %o\n", count, count, count);
// 显示字符
printf("显示字符 %c %c\n", ch,65);
return 0;
}
代码运行结果如图
因为原始的count为负数,原码为10000000000000000000010011010010
补码为11111111111111111111101100101110
由于%u的存在,将原count的补码当作原码进行翻译,才会输出429466062。
接下来是%f,%lf,%e/E,%g/G,这四个输出的均为double类型的浮点数
%f和%lf就是用来打印默认为小数点后六位精度的浮点数
%e是将浮点数进行科学计数法后打印,e的大小写仅决定了输出中的e的大小写
%g是根据数值不同自动选择 %f 或 %e,%e 格式在指数小于-4或指数大于等于精度时用使用,g的大小写也仅跟输出的e的大小写相关。
int main()
{
double f = 123.456;
// 显示浮点数
printf("R浮点数 \n%f %lf\n%e %E\n", f, f, f, f);
printf("%g\n", 0.00001234);
printf("%G\n", 0.00001234);
printf("%g\n", 0.0001234);
}
最后是%s和%p
%s是以字符串的形式打印,直到遇到0或'\0'(因为'\0'的ASCII码值为0)才会停下,如果没遇到就会在之后的内存空间里一直寻找,直至找到。
%p就是以16进制形式输出指针。
int main()
{//以字符串的形式打印数组
char arr1[] = { 'a','b','c','d','e','f' };
char arr2[] = { 'a','b','c','d','e','f','\0'};
char arr3[] = { 'a','b','c','d','e','f',0 };
char arr4[] = "abcdef";
printf("%s\n%s\n%s\n%s\n", arr1, arr2, arr3,arr4);
//打印地址
printf("%p\n%p\n", &arr1, &arr4);
return 0;
}
像arr1中就会打印出烫烫烫烫烫,这就是没找到0或'\0',但arr4中因为是以字符串的形式存入的,自带了'\0',所以不会出现这样的问题。
有写的不好的地方欢迎各位指出并改正