当前位置: 首页 > news >正文

C语言萌新如何使用printf函数?

🐎作者的话
如果你搜索输入输出函数,那么你会看到输入输出流、Turbo标准库、标准输出端、stdout什么什么乱七八糟的,作为一个萌新,哪懂这些?
本文介绍萌新在前期的学习中,常用的输入输出函数及其功能~


跳跃式目录

    • printf介绍
    • 宽度介绍
    • 精度介绍
    • 标识介绍
      • 减号
      • 加号
      • 井号
      • 数字0
    • printf的返回值
    • 打印练习


printf介绍

函数原型: int printf(参数1,参数2,参数3,参数4,参数~,参数n)
这就是对于我们萌新来说的函数原型,有许许多多的参数,返回值是int类型。

参数1: 参数1是一个字符串,printf会打印这个字符串,你可以直接用双引号引着放进去,也可以存在一个字符数组里,然后把数组的首地址放进去,像这样:

int main()
{
	printf("太阳出来我晒太阳!!!");

	char str[] = "月亮出来我晒月亮喽~";
	printf(str);

	return 0;
}

运行效果图:
在这里插入图片描述
可以看到,两个字符串都被打印了。

但是,我们可能要打印我们自己也不知道是多少的变量,这要怎么办呢?

这时候,就需要在参数1的str中加入一些控制符,即"%"加一个或两个字母,在str中每多了一个"%"加字母的组合,后面就要多一个参数,至于这个字母,根据输出变量的类型不同,字母也会不同。

常见字母请看以下表格:

%字母对应变量类型
%dsigned int
%uunsigned int
%o八进制unsigned int
%x(%X)十六进制unsigned int
%cchar
%sstring(字符串)
%p地址(指针)
%ffloat
%lfdouble
%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:刚才说过,控制符就是一个%号加是一或两个字母,不要忘了哦。

详细效果:
对于%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;
}

效果图:
在这里插入图片描述

标识介绍

  • 接下来我们介绍最复杂的标识。

  • 标识写在紧挨在%的右边,可以写“-”、“+”、“#”、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。

打印练习

以下五个练习,你能写出打印内容吗?

  1. int a=15; printf("%#x", a);
  2. int a=4; printf("%10.*d", a, a);
  3. int a=4; printf("%u",a);
  4. int a = 6; printf("%-*d",a,a);
  5. int a = 8; printf("%+.*d",a,a);

相关文章:

  • 【Kotlin】类的继承 ① ( 使用 open 关键字开启类的继承 | 使用 open 关键字开启方法重写 )
  • [网鼎杯 2020 青龙组]AreUSerialz
  • Windows 服务器刷题(带答案)
  • docker入门(二):docker的常用命令
  • colab 如何释放gpu显存?
  • CANoe-仿真总线上的红蓝线、“CANoe DEMO“ license下的软件限制
  • SpringBoot 参数接收只看这一篇文章就够了
  • Vector - VT System - 模拟IO板卡_VT2816
  • 云原生|kubernetes|2022年底cks真题解析(1-10)
  • 7个实用的DTC品牌出海营销策略,打造强大的品牌竞争力
  • 浅谈Android下的注解
  • 【初阶数据结构】——写了将近 5 万字,终于把 二叉树 初阶的内容讲清楚了
  • c++通讯录管理系统
  • jvm系列(1)--JVM和Java体系架构
  • 线程池ThreadPoolExecutor源码解析
  • 如何减少频繁创建数据库连接的性能损耗?
  • WebSocket长连接接入支付宝消息服务,实现消息通知
  • 数组常用方法总结 (6) :includes / indexOf / lastIndexOf / valueOf / toString / isArray
  • 系统分析师案例必备知识点汇总---2023系列文章一
  • java springboot 项目构建报错解决办法
  • 巴黎奥运后红土首秀落败,郑钦文止步马德里站次轮
  • 乐聚创始人:人形机器人当前要考虑泡沫问题,年底或将进入冷静期
  • 北京顺义潮白河大桥主跨坍塌原因公布,已成立事故调查组
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 洛阳白马寺的墓主人是狄仁杰?其实这个误解从北宋就开始了
  • 蔚来李斌:当下国际贸易环境有不确定性,但坚信中国汽车产业最终将占全球四成份额