☀️光天化日学C语言☀️(04)- 格式化输出 | 爱要大声 “输“ 出来
一、前言
本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。并且作者在此承诺,这个系列全部文章均免费且开源,主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
这一章要讲的内容是:如何将整数、浮点数、字符、字符串按照给定的格式输出到屏幕上。
二、人物简介
- 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
- 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。
三、概念简介
1、输出的含义
2、标准输出
在C语言中,有三个函数可以用来在屏幕上输出数据,它们分别是:
1)puts() :只能输出字符串,并且输出结束后会自动换行;
2)putchar() :只能输出单个字符;
3)printf():可以输出各种类型的数据,作为最灵活、最复杂、最常用的输出函数,可以完全替代全面两者,所以是必须掌握的,今天我们就来全面了解一下这个函数。
3、格式化
- 我们在进行输出的时候,对于小数而言,可能需要输出小数点后一位,亦或是两位,这个计算机自己是不知道规则的,需要写代码的人告诉它,这个告诉它如何输出的过程就被称为格式化。
四、格式化输出
printf
前几个章节都有提及,这个函数的命名含义是:Print(打印) 和 Format (格式) ,即 格式化输出。
1、数据类型格式化
1)整数
#include <stdio.h>
int main()
{
int a = 520;
long long b = 1314;
printf("a is %d, b is %lld!\n", a, b);
return 0;
}
- 对于
int
而言,我们利用%d
将要输出的内容进行格式化,然后输出,简单的理解就是把%d
替换为对应的变量,%lld
用于对long long
类型的变量进行格式化,所以这段代码的输出为:
a is 520, b is 1314!
2)浮点数
#include <stdio.h>
int main()
{
float f = 1.2345;
double df = 123.45;
printf("f is %.3f, df is %.0lf\n", f, df);
return 0;
}
- 对于浮点数而言,我们利用
%f
来对单精度浮点数float
进行格式化;用%lf
来对双精度浮点数进行格式化,并且用.
加 “数字” 来代表要输出的数精确到小数点后几位,这段代码的输出为:
f is 1.235, df is 123
- 另外,单精度 和 双精度 的区别就是双精度的精度更高一点,也就是能够表示的小数的范围更加精准,这个会在介绍浮点数的存储方式时详细介绍。
3)字符
#include <stdio.h>
int main()
{
char ch = 'A';
printf("%c\n", ch);
return 0;
}
- 对于字符而言,我们利用
%c
来进行格式化;C语言中的字符是用单引号引起来的,当然,字符这个概念扯得太远,会单独开一个章节来讲,具体可以参考 ASCII 码。 - 顺便我们来解释一下一直出现但是我闭口不提的换行符
\n
,这个符号是一个转义符,它代表的不是两个字符(反斜杠\
和字母n
),而是换行的意思; - 这段代码的输出就是一个字符 A;
A
- 我们通过一个例题来理解这个换行符的含义;
【例题1】第1行输出1个1,第2行输出2个2,第3行输出3个3,第4行输出4个4。
#include <stdio.h>
int main()
{
printf("1\n");
printf("22\n");
printf("333\n");
printf("4444\n");
return 0;
}
- 我们也可以用一条语句解决,如下:
#include <stdio.h>
int main()
{
printf("1\n22\n333\n4444\n");
return 0;
}
4)字符串
- 字符串,是由多个字符组合而成,用双引号引起来,这一章我不打算讲得太细,只需要知道用
%s
进行格式化的即可,代码如下:
#include <stdio.h>
int main()
{
char str[100] = "I love you!";
printf("%s\n", str);
return 0;
}
- 这段代码,聪明的你应该很容易看懂啦!输出的就是:
I love you!
- 作者:我了个擦,字体颜色都变了……
2、对齐格式化
- 我们发现,上文中所有的格式化,都有一个
%
和一个字母,事实上,在百分号和字母之间,还有一些其它的内容。
主要包含如下内容:
1)负号:如果有,则按照左对齐输出;
2)数字:指定字段最小宽度,如果不足则用空格填充;
3)小数点:用与将最小字段宽度和精度分开;
4)精度:用于指定字符串重要打印的而最大字符数、浮点数小数点后的位数、整型最小输出的数字数目;
【例题2】给定如下一段代码,求它的输出内容。
#include <stdio.h>
int main()
{
double x = 520.1314;
int y = 520;
printf("[%10.5lf]\n", x);
printf("[%-10.5lf]\n", x);
printf("[%10.8d]\n", y);
printf("[%-10.8d]\n", y);
return 0;
}
- 输出答案如下:
[ 520.13140]
[520.13140 ]
[ 00000520]
[00000520 ]
- 我们发现,首先需要看小数点后面的部分,将要输出的内容实际要输出多少的长度确定下来,然后再看字段最小宽度,最后再来看左对齐还是右对齐。
- 然后,我们来看看把不同类型的变量组合起来是什么效果;
#include <stdio.h>
int main()
{
char name[100] = "Zhou";
int old = 18;
double meters = 1.7;
char spostfix = 's';
printf("My name is %s, %d years old, %.2lf meter%c.\n",
name, old, meters, spostfix);
return 0;
}
- 它的输出结果如下:
My name is Zhou, 18 years old, 1.70 meters.
- 通过这一章,我们学会了 通过格式化的方式输出 整数、浮点数、字符、字符串,以及对数据进行对齐,希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!
- 点赞
- 收藏
- 关注作者
评论(0)