🙇♀️写在前面的话:
这个文章主要讲解%d的用法,会由两个题目引入,进而分析和总结%d的d前面加不同数字(整数、小数)情况下的用法和作用。
🍬About:%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;
}
题目2:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 1234;
printf("%2d\n", a);
return 0;
}
对比:
当时,我和 一位同学对这两个题目的疑问是:第二个题目不应该输出结果是“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:
写在后面的话:
这篇是通过学习、请教他人,再加上经过自己的一些反思和理解,整理而写成的。其中可能有一些不准确的地方或者理解不深入的地方,还请大家多多指正!希望能对大家遇到相似问题时有所帮助!😉
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142482.html