【C语言篇】详细解释:转换字符%d和--d前面加不同数字时的意义和作用

🙇‍♀️写在前面的话:
这个文章主要讲解%d的用法,会由两个题目引入,进而分析和总结%d的d前面加不同数字(整数、小数)情况下的用法和作用。


🌎引入–2个题目:

题目1:

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1

int main()
{
	int x = 0;
	float y = 0;

	scanf("%3d%f", &x, &y);
	printf("%d %f\n", x, y);


	return 0;
}

这个题目的结果是C:123
在这里插入图片描述

题目2:

在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int a = 1234;
	printf("%2d\n", a);

	return 0;
}

这个题目的答案是A:1234
在这里插入图片描述

对比:

当时,我和 一位同学对这两个题目的疑问是:第二个题目不应该输出结果是“12”吗。因为根据我们之前对%d浅显的理解是:d前面加整数,限制了输出字符数量,换句话来说,限制了在屏幕上输出的宽度。
其实,要弄清楚这个问题,要明白以下几点:
🅰:d前面的整数和实际字符数的大小关系。

🅱:经过格式化修饰的%d是在scanf函数内还是在printf函数


·第一个题目中,%d前面的数字3是小于实际字符数的,而且%3d是存在与输入函数scanf函数内的。
那么%d前面的整数,限制了编译器读取整数的字符数量(只从左向右读取三个整数字符)。
所以,x的值是123(为12345的前三个字符)
🆚
·第二个题目中,%d前面的数字2也是小于实际字符数的,而且%2d是存在于输出函数printf函数内的。
那么%d前面的整数,限制了输出在屏幕上的字符数量(宽度)
但是注意:❗❗❗
2是小于4的,按理来说应该应该输出2对吧?其实不然。
printf函数内%d格式化修饰时,并不是所有时候都能发挥作用,只有当d前面的数字是大于实际字符数时,才“发挥作用“(右对齐,左边补空格,这个下面会详细演示和讲解)。
在printf函数内:当d前面的整数小于实际字符数时,d前面的数字表示至少输出这么多个字符(并不是至多)。
所以,输出的结果是1234,而不是12.

💦分析d前加数字不同情况时的意义

这里用代码演示一下
🅰:printf函数内存在%md时
m<实际字符数时:是至少输出m个,不是表示只能输入m个!!!(这个时候m其实不发挥作用)
在这里插入图片描述
m>实际字符数时:
在这里插入图片描述
🅱:scanf函数内存在%md时:
m<实际字符数时:这个表示的才是至多(编译器至多读取m个字符)。
在这里插入图片描述
m>实际字符数时:因为表示的是至多,所以这个其实也不会发挥作用。
在这里插入图片描述

🌇总结:

1,⭐%d前面加整数(%md)

·scanf(输入)内:

1,m>实际字符数
m不发挥作用,无影响
2,m<实际字符数(至多读取m个
m发挥作用,编译器从左向右读取m个数字字符

·printf(输出)内:

1,m>实际字符数
m发挥作用,在屏幕上输出字符的宽度为m个字符,并且右对齐(如果m为负整数,那么左对齐,右边填充空格),不够的话左边补空格。
2,m<实际字符数(至少输出m个
m不发挥作用(有没有m都一样)。

2,补充:⭐%d前面加小数

假设:(%m.nd)
printf内:
右对齐,占m个字符空间(空格填充),n个有效数字(不足填0)
eg:
在这里插入图片描述


写在后面的话:
这篇是通过学习、请教他人,再加上经过自己的一些反思和理解,整理而写成的。其中可能有一些不准确的地方或者理解不深入的地方,还请大家多多指正!希望能对大家遇到相似问题时有所帮助!😉

  • 17
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是瑶瑶子啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值