萌新如何使用printf函数?
作者的话
如果你搜索 输入输出函数,那么你会看到输入输出流、Turbo标准库、标准输出端、stdout什么什么乱七八糟的,作为一个萌新,哪懂这些?
本文介绍萌新在前期的学习中,常用的输入输出函数及其功能~
** *
printf介绍
函数原型: int printf(参数1,参数2,参数3,参数4,参数~,参数n)
这就是对于我们萌新来说的函数原型,有许许多多的参数,返回值是int类型。
参数1: 参数1是一个 字符串 ,printf会打印这个字符串,你可以直接用双引号引着放进去,也可以存在一个字符数组里,然后把数组的首地址放进去,像这样:
int main()
{
printf("太阳出来我晒太阳!!!");
char str[] = "月亮出来我晒月亮喽~";
printf(str);
return 0;
}
运行效果图:
可以看到,两个字符串都被打印了。
但是,我们可能要打印我们自己也不知道是多少的变量,这要怎么办呢?
这时候,就需要在参数1的str中加入一些控制符,即"%"加 一个或两个字母 ,在 str中每多了一个"%"加字母的组合,后面就要多一个参数 ,至于这个字母,根据输出变量的类型不同,字母也会不同。
常见字母请看以下表格:
%字母 | 对应变量类型 |
---|---|
%d | signed int |
%u | unsigned int |
%o | 八进制unsigned int |
%x(%X) | 十六进制unsigned int |
%c | char |
%s | string(字符串) |
%p | 地址(指针) |
%f | float |
%lf | double |
%e(%E) | 以指数表示的浮点型 |
注意: 不是说某种类型只能用某种控制符输出,而且会把你一会放在后面的参数,当成这种控制符对应的类型输出。
比如说: 你用%u输出了一个signed型的数,那么计算机在读取这个数时,会把它当成unsigned来读取。
为了应对各种不同的情况,在"%"和字母之间,会 选择性地 加入三个参数,这三个参数分别叫做 标识、宽度、.精度 。
其中, 标识必须紧挨在"%"的右边 , 宽度紧挨在标识的右边 , .精度在宽度和字母的中间 (精度前面有一个小小的点,这不是博主手误哦,真正存在的),像这样:
int main()
{
printf("%标识宽度.精度d" );
return 0;
}
宽度介绍
- 宽度可以是一个数,也可以是一个星号" *"。
- 如果是一个数,假设是5,那么就代表接下来输出的这个数的宽度至少有5,像这样:
int main()
{
int a = 12;
printf("%5d",a );
return 0;
}
效果图:
可以看到,被灰色框起来的,就是宽度为5。
那么星号,就是为了应对不知道该输出多宽的数据,以一个参数变量当作数据的宽度,如果写了星号,在后面加入变量时要多一个,而且必须写在第一位,像这样:
int main()
{
int a = 12;
printf("% *d",5,a );
printf("% *d", 10, a);
return 0;
}
效果图:
精度介绍
- 精度要紧挨在字母的左边,而且精度的左边还要加上一个点。
- 在这个点的右边,你可以写 一个数字或者一个星号 ,没错,和宽度一样。
- 顾名思义,是用来控制 输出数据的精度 的,只是对于不同的控制符,有不同的效果。
PS:刚才说过,控制符就是一个%号加上一或两个字母,不要忘了哦。
详细效果:
1,对于%d(signed int)、%u(unsigned int)、%o(八进制unsigned int)、%x(十六进制unsigned int),这四个来说,是表示 数据输出的最小位数 ,像这样:
int main()
{
int a = 12;
printf("%. *d", 4, a);
return 0;
}
效果图:
因为精度是4,所以至少输出四位,不足则前导0补充。
精度不会缩小一个整数的输出,像这样:
int main()
{
int a = 12345;
printf("%. *d", 4, a);
return 0;
}
效果图:
2,对于%s(string)来说, 精度的作用是控制输出的最大字符数 ,像这样:
int main()
{
char arr[]="123456";
int tmp = printf("%.3s",arr);
return 0;
}
效果图:
标识介绍
- 接下来我们介绍最复杂的标识。
- 标识写在紧挨在%的右边,可以写“-”、“+”、“#”、0,即 减号,加号,井号,还有数字0 。
减号
和宽度配合使用,表示左对齐,如果不加减号,默认右对齐,像这样:
int main()
{
int a = 42;
printf("%10d",a);
printf("%-10d", a);
return 0;
}
打印结果如下:
可见,两者宽度都是10,但一个向左对齐,一个向右对齐。
加号
写上加号,即使是正数,也会显示一个"+",像这样:
int main()
{
int a = 42;
printf("%+d",a);
return 0;
}
效果图:
如果不写这个加号,只有负数会显示负号,正数不显示加号。
井号
众所周知(即使是萌新也应该知道), 八进制要前导0,十六进制前导0x,二进制前导0b ,井号的作用就是 显示八进制和十六进制的前导标志 ,像这样:
int main()
{
int a = 0x00001234;
printf("%#x",a);
printf(" n");
printf("%x", a);
return 0;
}
}
效果图:
如图,加了井号的显示了前导标志。
数字0
数字0和宽度配合使用,它可以让数据的前面不再补充空格,反而补充0,像这样:
int main()
{
int a = 555;
printf("%10d", a);
printf(" n");
printf("%010d", a);
return 0;
}
效果图:
在宽度前面多加一个0,就能让它补充0了。
printf的返回值
前面我们说到,printf函数的返回值是一个int类型的数,这个数是printf函数打印出来的字符数,如果没能成功打印,就返回一个负数,像这样:
int main()
{
int a = 1234;
int tmp = printf("%010d", a);
printf(" n");
printf("%d", tmp);
return 0;
}
效果图:
可以看到,我们打印了十个字符,那么它的返回值就是10。
打印练习
以下五个练习,你能写出打印内容吗?
int a=15; printf("%#x", a);
int a=4; printf("%10. *d", a, a);
int a=4; printf("%u",a);
int a = 6; printf("%- *d",a,a);
int a = 8; printf("%+. *d",a,a);
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023