当前位置:网站首页>C语言标准格式化输入输出
C语言标准格式化输入输出
2022-07-19 05:23:00 【weixin_52398991】
C语言的标准输入输出都是我们都是在最开始的时候就用到的。但是,它们的原型也有不一样的知识值得探索。
目录
一、标准输出printf( )
你是不是看见过这样的代码?
double a = 1.12345 , b = 9.87654;
double c = b - a;
printf( "%.2lf" , c );
第三行的printf显然和以前不同。实际上,printf函数的格式化字符串中,在%和类型之间还有很多参数可选填:
%[flags][width][.prec][hlL]type
(1)Flags
Flag | 含义 |
- | 左对齐 |
+ | 添加符号 |
空格 | 正数留空 |
0 | ' 0 ' 填充 |
第一个 - 表示左对齐,具体如下:
printf("%9d \n" , 123);
printf("%-9d \n" , 123);
输出结果为:
第一个printf函数中%与d之间的9表示输出一共有九个字符,因此前面多加了9-3=6个空格;后面的printf加了左对齐符号 - ,于是贴着屏幕左侧打印。
第二个+号很容易理解,如
printf("%+d\n",123);
结果就为 “ +123 ” 。
第三项空格就是平常的空格,略过;
第四项0,就拿第一个例子说,假设代码是这样的:
printf("%09d\n",123);
printf("%-09d\n",123);
第一行输出结果为:000000123
因为‘ 9 ’告诉编译器输出要有九个字符,实际只有三个,我们又加了补零的提示,于是前面就用零补齐。
但是,值得注意的是,第二行的输出依然是靠在最左边的123,不会受0影响。
(2)width和.prec
width或.prec | 含义 |
number | 输出最小字符数 |
. number | 小数点后输出的字符数 |
* | 下一个参数是最小字符数 |
.* | 下一个参数是小数点后字符数 |
第一个的功能就是前面的限制最小输出字符数;后面的.number实例如下:
printf("%lf\n" , 123.0);
printf("%.2lf\n" , 123.0);
这两行的输出分别是:
前者没有加.2,系统默认精确到小数点后六位;后者限制了小数点后位数,于是只输出两位。
类似的,* 和 .* 实例如下:
printf("%9d\n",123);
printf("%*d\n",9,123);
第一行和第二行是等价的,都是输出六个空格和123。同理,下面两行也是等价的
printf("%.*lf\n",2,123.0);
printf("%.2lf\n",123.0);
都会输出 “ 123.00 ” 。这样做的意义是让程序拥有更多的灵活性,可以用变量代替格式化字符串中的输出字符限制。
(3)HlL
类型修饰(HIL) | 含义 |
hh | 以单个字节形式输出 |
h | short |
l | long |
ll | long long |
L | long double |
后四项相信大家都理解,那第一项是什么意思呢?来看代码:
printf("%hhd\n",12345);
这里,我们试图把12345转成单字符形式输出。而输出却是57.怎么回事呢?让我们拿出计算器。
12345的十六进制为0x3039,保留后两位,也就是39,转成十进制就是57。
也就是说,编译器把12345转成十六进制,再取出后两位转成十进制数输出。
(4)type
type | 用于 | type | 用于 |
i 或 d | int | g | float |
u | unsigned int | G | float |
o | 八进制 | a / A | 十六进制浮点 |
x | 十六进制 | c | char |
X | 十六进制大写字母 | s | char * / string |
f / F / lf | float , double | p | 指针(地址) |
e 或 E | 指数 | n | 读写的个数 |
上表大家看看就好,比较常用的也就 d、f、c、s、p 几种,如果真要其他的自己对照即可
二、标准输入scanf ( )
scanf()的可用命令符就相对较少了:
%[flag]type
(1)Flag
flag | 含义 | flag | 含义 |
* | 跳过 | l | long,double |
number | 最大字符数 | ll | long long |
hh | char | L | long double |
h | short |
第一项星号的用法与printf不同,如下:
int num;
scanf("%*d%d" , &num);
printf("%d \n" , num);
假如输入123和456,打印结果只有456,说明 * 表示跳过后面一个类型的参数。
其他的和printf一样一样的,不做赘述。
(2)type
type | 用于 | type | 用于 |
d | int | s | char * / string |
i | int(数据能为十六进制、八进制) | [...] | 所允许的字符 |
o | 八进制 | p | 指针(地址) |
x | 十六进制 | ||
u | unsigned int | ||
a / e / f / g | float | ||
c | char |
这里和上面的差不多,%d和%i的主要区别在于,%d只能接受十进制数,二%i则是后来新增的,支持八进制以及十六进制数的输入,更加灵活。
最后,制作不易,点个赞呗~
边栏推荐
猜你喜欢
随机推荐
JVM之GC调优原理(十一)
Implementation of UART serial asynchronous communication with FPGA - transmission of single data
Using OpenCV to connect cameras in 3dslicer
整型类型128转byte为什么是-128
Use tasks and random functions to write excitation test files during FPGA simulation
div拖拽效果
解决几个常见问题
FPGA data receiving and sending and data loopback experiment based on serial port RS232
x的平方根
3DSlicer中使用简单脚本处理数据
修正的判定/条件覆盖
Understanding of blocking assignment and non blocking assignment in FPGA
JVM之GC调优原理(七)
NN of pytorch Conv1d detailed explanation
仅限于整数型的加减乘除法的调用
MySQL之InnoDB引擎(三)
Model in pytorch train(),model. Eval () and torch no_ The difference between grad()
ffmpeg 播放音视频,time_base解决音频同步问题,SDL渲染画面
Solr search engine - solrcloud installation and cluster configuration
浅谈Break和continue语句的区别