C语言printf格式化打印(%d、%md、%f、%c、%s、%o、%x、%p、%e、%E、%n等)
要追随光 2024-06-20 09:05:04 阅读 55
前言
在我们以后接触到更多知识点时,类型这种东西其实也就不神秘了,我们在学习操作系统时,经常会见到各种各样的类型,如pid_t、in_port_t、int32_t、int16_t等等,这种一般都是经过typedef的,其实很多时候我们遇到不认识的类型时,就可以看其是否是经过typedef的,再进行格式化输出,但如果大家是学C++的同学,就不用担心了,C++的cout可以自动识别类型,其底层其实是做了运算符重载和函数重载的。
一、整型家族的格式化打印形式
我们要记住 signed ➕ 类型 《==》 单独的类型,如 signed int 《==》 int
所以下面会用 (signed) 来表示:可以省略不写
如果格式化输出的并不是类型匹配的格式,会发生隐式类型转换
1. int类型
(signed)int (有符号整型)——— %d unsigned int (无符号的int类型)——— %u size_t (无符号的int类型)———— %zu 单独的unsigned (unsigned int 的缩写 )———— %u
int a = 2;unsigned int b = 3;size_t c = 4;unsigned d = 5;printf("%d\n", a);printf("%u\n", b);printf("%zu\n", c);printf("%u\n", d);
2. long类型
unsigned(signed)long (有符号长整型)——— %ld unsigned long (无符号的长类型)——— %lu
long a = 2;unsigned long b = 3;printf("%ld\n", a);printf("%lu\n", b);
3. long long类型
(signed)long long(有符号长长整型)——— %lld unsigned long long (无符号的长类型)——— %llu
long long a = 2;unsigned long long b = 3;printf("%lld\n", a);printf("%llu\n", b);
4. short类型
(signed)short (有符号短整型)——— %hd unsigned short (无符号的长类型)——— %hu
short a = 2;unsigned short b = 3;printf("%hd\n", a);printf("%hu\n", b);
5. %md
以上类型若是想在 printf和scanf中保留相关位数——— %md请看本篇文章:%md在printf语句和scanf语句中的区别-CSDN博客
6. 八进制格式化打印:
打印八进制数:
不输出前缀0———%o
输出前缀0 ————%#o
八进制数例如:0123,0234,0345,03等前缀是0的数
若想自己定义变量为八进制数字:int x = 01234567; 0开头,后面数字0~7之间;
int a = 0123;printf("%o\n", a);printf("%#o\n", a);
7. 十六进制格式化打印
打印十六进制形式
不输出前缀0x———%x , %X
输出前缀0x————%#x,%#X
十六进制数例如:0x11223344,0X11,0x221c等前缀是0x和0X的数
若想自己定义变量为八进制数字:int x = 0x123a; 0开头,后面数字0~9,a~f之间
(a为10,f为15)
#include <stdio.h>int main(){ int x= 0x19adf; printf("%#x\n", x); printf("%x\n", x); return 0;}
8. %i和%d的区别:
在C语言中,%i和%d都是格式控制符,用于格式化输出整数类型的变量。
%d 用于输出有符号的十进制整数。它会将整数按照十进制形式输出,并且如果整数是负数,则会输出一个负号。
%i 也用于输出有符号的十进制整数。与%d相比,%i可以将八进制数字和十六进制数字转换成十进制数字输出。
二、浮点数float,double(浮点数只有有符号的类型)
float(有符号的单精度浮点数)——— %f 默认保留6位小数double(有符号的双精度浮点数)———%lf 默认保留15位小数
在输出中想保留n位小数———%.nf 或者 %.nlf
#include <stdio.h>int main(){ float a = 1.2345; printf("%.1f\n",a); return 0;}
这里表示输出的结果保留一位小数,也就是1.2
三、科学计数法 格式化打印
1. 科学计数法表示的浮点数(小写字母)———
%e
2. 科学计数法表示的浮点数(大写字母)———%E
double a = 100.23;printf("%e\n", a);printf("%E\n", a);
四、字符类型的格式化打印形式
1. 字符类型
char——— %c( 输出单个字符 ) char——— %d( 输出字符对应的ASICC值)
char c = 'a';printf("%c\n", c);printf("%d\n", c);
2. 字符串类型
字符串类型———%s (输出字符串)
printf是可以自动识别字符串类型的,所以也可以这样打印:
printf("%s\n", "abcderf");
五、%ms
m代表的是在屏幕上输出m个字符个数
m 前面没有负号 右对齐
m 前面有负号 左对齐
m <= 字符串长度,打印整个字符串
m > 字符串长度,不够地方用空格填充
1. m < 字符串长度
#include <stdio.h>int main() { printf("%5s,%s","computer","computer"); return 0;}
如图,我们是%5s,5是小于字符串长度的,所以打印整个字符串就OK啦
2. m > 字符串长度
#include <stdio.h>int main() { printf("%15s,%s","computer","computer"); return 0;}
这里是打印15个字符个数,很明显字符串长度小于15,不够的就用空格填充
六、特殊打印格式
1. %p
打印地址———%p(16进制显示)
int a = 100;printf("%p\n", &a);
2. %n
%n 用来统计printf在%n之前打印的字符个数;%n不会打印出内容;
具体看这个博客:%n在C语言总的意思-CSDN博客
#include <stdio.h>int main(){ int b; printf("helloworld %n12345\n", &b); printf("%d\n", b); return 0;}
下一篇: Doris、StarRocks 压测对比
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。