C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数
凡事发生必将有益于我,高手,从来都不仅仅是具备某种思维的人,而是那些具备良好学习习惯的人,成为高手,无他,手熟尔!加油
在最近的学习之中,对于格式化输出这个知识点,这里学一点,那里学一点,感觉学的很杂,不系统。于是,我深入的去摸索这个知识点,允许我今天写一篇博客来总结一下这一类知识点,和大家分享一下,以供大家一起学习!
目录:
一.普通的格式化输出
二.特殊的格式化输出
(1)整数的格式化输出
(2)小数的格式化以及四舍五入输出
(3)字符数组的格式化取值
三.sprintf的格式化输出
使用sprintf出现的内存溢出情况
四.总结三类比较容易混的情况
一.普通的格式化输出:
%d //整型输出%ld //长整型输出%o //以八进制数形式输出整数%x //以十六进制数形式输出整数,或输出字符串的地址%u //以十进制数输出unsigned型数据(无符号数)注意:%d与%u的区别是,有无符号(正负号)和数值范围(%u范围大)不同,也就是极限的值不同,不然数值打印出来会出错。%c //用来输出一个字符%s //用来输出一个字符串%f //用来输出实数,以小数形式输出,默认情况下保留小数点6位%.5f //用来输出实数,保留小数点5位%e //以指数形式输出实数eg:a=3e+10<=>3*10^10;
注意:e的前面和后面的值必须是整数%g //根据大小自动选f格式或e格式,且不输出无意义的零二.特殊的格式化输出:
(1)整数的格式化输出:
小知识:一个C程序是默认右对齐的,但是可以认为修改为左对齐,形如%-d,负号表示左对齐,打印出来的内容是向左边靠拢对齐的。%+d(加号可省略),打印出来的内容是向右边靠拢的。
直接上代码:
int main() {int a =987, b =987654;printf("%5d\n", a); // 右对齐,且最少取5位整数,如果变量a多余5位则全取,不足5位使用空格 左边补全;printf("%05d\n", a); // 在上一个的基础上加一个0,使用0代替空格,在左边补齐位数;printf("%-5d\n", a); // 左对齐,不足位数,使用空格补全;printf("%-05d\n", a); // 左对齐,不足位数,还是用空格补全;//注意:这里不再补0,这是因为本来是左对齐,如果补0的话,这个值的尾部会补一些0,这个值就会发生改变,建议读者和第四行的代码对比一下;printf("%5d\n", b); // 变量b的值超过5位则全部取;return 0;
}运行结果如下:
987
00987
987
987
987654(2).小数的格式化以及四舍五入输出:
直接上代码:
#include <stdio.h>int main() {double a = 123.456, b = 21.12;printf("%.2f\n", a); // 取变量a的值的后2位小数,且第三位四舍五入;printf("%.3f\n", b); // 取变量b的值的后3位小数,且不足三位则用0补全;printf("%4.2f\n", b); // 取至少4位字符,2位从b的左边开始取2位,剩余2位<整数2位+小数点1位,所以三 位全部输出;printf("%7.2f\n", b); // 取至少7位字符, 2位小数,剩余5位>整数2位 + 小数点1位, 多出来的2位用 空格补全;//注意:小数点也占一位字符;return 0;}运行结果如下:
123.46
21.120
21.1221.12(3).字符数组的格式化取值:
直接上代码:
#include <stdio.h>
#include <time.h>int main() {char str[50];char s[5] = { 'a', 'b', 'c' };printf("%s==\n", s); // 打印完整的字符数组(字符串)printf("%2s==\n", s); // 打印至少2个字符printf("%5s==\n", s); // 打印至少5个字符,不足的用空格在左边补齐printf("%-5s==\n", s); // 打印至少5个字符,不足的用空格在右边补齐printf("%4.2s==\n", s); // 总共输出4个字符,但是有2个需要在s1里面从左取,剩余的字符用空格默认在左边补全printf("%.2s==\n", s); // 总共输出2个字符,这2个字符从s1里面的左边开始取return 0;
}运行结果如下:
abc==
abc==abc==
abc ==ab==
ab==三.sprintf的格式化输出:
该函数的原型为:
int sprintf(char *str, const char *format, [argument,...]);
1)str : 这是指向一个字符数组的指针,该数组存储了 C 字符串;
2)format:是字符串嵌入的标签(用%d或%f等代表的标签);
3)argument部分,可以包含任意多个,只要format中有对应的标签表示;
4)加const是为了防止对format对应的内容误操作;
另外要注意以下三点:
(1) 该函数包含在stdio.h的头文件中;
(2) sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中(要注意字符串的 长度要足够容纳打印的内容,否则会出现内存溢出);
(3)printf函数打印输出到屏幕上, sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用 广泛;
直接上代码:
#include <stdio.h>int main() {char str[30];double a = 123.123456, b = 90.12;sprintf(str, "获取的小数为:%.2f\n", a); // 此处,只是把双引号中的字符串赋值给str数组(注意打印 书来的a的值也算双引号中的字符串),并没打印到屏幕printf("%s\n", str); //打印出字符串str里面的内容;//注意sprintf函数本身是不打印的;sprintf(str, "%.2f----%6.2f\n", a, b); // 把2个小数拼接到一个字符串中printf("%s\n", str);}运行结果如下:
获取的小数为:123.12
123.12---- 90.12 // 注意,此处需要打印6位,而b总共才5位,需要1位空格补全使用sprintf出现的内存溢出情况:
字符数组定义的时候过于小导致的异常情况

四.总结三类比较容易混的情况:
%m.nd:m代表输出一共占m列,不够m列前面补空格,够m列不作任何处理,n代表这个数一共要有n列,不够前面补0,够n列不做任何处理。
int main()
{int a = 123;printf("%.4d\n",a);printf("%5d\n", a);printf("%5.4d\n", a);return 0;
}运行结果如下:
01231230123%m.ns:m代表这个字符串一共输出m列,n代表取这个字符串前n个元素输出到整个m列的右侧,当n<m时,用空格补齐左边的余缺,当n>=m时,不做处理
int main()
{char*s = "hello world";printf("%5.3s\n",s);printf("%6.7s\n",s);printf("%.2s\n",s);return 0;
}
hel
hello w
heint main()
{float a = 1.25;printf("%5.1f\n",a);printf("%.4f\n",a);printf("%4.3f\n",a);return 0;
}1.3
1.2500
1.250%m.nf:m代表这个数一共要输出m列,包括小数点和小数的位数,n代表小数的个数,当浮点数的小数小于n时,采用四舍五入,大于时,后面补0。
2023.02.21
From:努力进大厂的新青年
相关文章:
C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数
凡事发生必将有益于我,高手,从来都不仅仅是具备某种思维的人,而是那些具备良好学习习惯的人,成为高手,无他,手熟尔!加油在最近的学习之中,对于格式化输出这个知识点,这里…...
Nginx之反向代理、负载均衡、动静分离。
Nginx之反向代理、负载均衡、动静分离。 1、Nginx是啥? 轻量级Web服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器 在 BSD-like 协议下发行、占内存少、并发高(同时处理请求能力)。 2、安装 官网…...
0401不定积分的概念和性质-不定积分
文章目录1 原函数与不定积分的概念1.1 原函数1.2 原函数存在定理1.3 不定积分2 不定积分的性质3 基本积分表4 例题后记1 原函数与不定积分的概念 1.1 原函数 定义1 如果在区间I上,可导函数F(x)的导航为f(x),即对任一x∈Ix\in Ix∈I,都有 F′…...
数组中的各种迭代API方法手写
js的数组上有很多实用的方法,不论是在遍历数组上,还是在操作数组内元素上,它有许多不同的遍历数组的方法,同时它还有着可以直接操作数组中间元素的方法。 接下来,我来带大家手写数组里的 遍历方法 。 Array.forEach(…...
详解量子计算:相位反冲与相位反转
前言 本文需要对量子计算有一定的了解。需要的请翻阅我的量子专栏,这里不再涉及基础知识的科普。 量子相位反冲是什么? 相位反转(phase kickback)是量子计算中的一种现象,通常在量子算法中使用,例如量子…...
C++——C++11第三篇
目录 包装器 function包装器 bind 包装器 function包装器 function包装器 也叫作适配器。C中的function本质是一个类模板,也是一个包装器。 上面的程序验证,我们会发现useF函数模板实例化了三份。 包装器可以很好的解决上面的问题 ,让它只实…...
180 2 22222
选择题(共180题,合计180.0分) 1. 在项目开工会议期间,项目发起人告诉产品负责人和团队项目章程即将完成。然而,由于存在在紧迫的期限内满足政府监管要求的压力,发起人希望立即开始工作。产品负责人下一步应该做什么? A 告诉发起人…...
成人高考初中毕业能报名吗 需要什么条件
初中学历的人员不能直接报名成人高考,考生需要有普通高中,职业高中,中专毕业证等高中同等学力就可以进行报名,在报名期间登陆所在省的教育考试院的成人高考报名入口进行报考。成人高考报名条件是什么1、遵守宪法和法律。2、国家承…...
ChatGPT初体验
ChatGPT初体验 前言 嘿嘿,最近啊AI ChatGPT刷新各大网站,对于我们国人而将很不友好,真的太不友好了。我呢在去年open AI发布的时候就有所关注,那个时候还没有像现在这样火热。谁知道短短几个月便传遍大街小巷。 一、什么是chatG…...
ChatGPT概念狂飙!究竟魅力何在?
原文:http://www.btcwbo.com/6988.html 近期,ChatGPT引领的人工智能概念在资本市场一路狂飙,AIGC题材持续发酵。截至2月7日,Wind ChatGPT指数今年以来累计上涨超50%,汉王科技、海天瑞声、云从科技等概念股股价已经翻倍…...
如何下载阅读Spring源码-全过程详解
这篇文章记录了下载spring源码和在IDEA中打开运行的全过程,并且记录了过程中遇到的问题和解决方案,适合需要学习spring源码的同学阅读。 1.spring源码下载地址 通过Git下载spring-framework项目源码: git clone https://github.com/spring…...
学了两个月的Java,最后自己什么也不会,该怎么办?
学着学着你会发现每天的知识都在更新,也都在遗忘,可能就放弃了。但是只要自己肯练,肯敲代码,学过的知识是很容易就被捡起来的。等你学透了用不了一年也可以学好 Java的运行原理:Java是一门编译解释型语言,…...
前端vue实现获取七天时间和星期几功能
前端vue实现获取七天时间和星期几功能 功能展示代码 <div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]" click"select(item)" :keyindex><span>{{item.name}}</span><span>{{item.…...
zookeeper单机部署
一.下载zookeeper压缩包 二.上传解压安装包到/data/zookeeper目录,并解压 tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz 三.修改配置文件 cd apache-zookeeper-3.5.10-bin/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg 修改为如下: dataDir/data/zooke…...
单片机输入输出模式
单片机输入输出模式输入模式模拟输入、浮空输入、上拉输入、下拉输入GPIO输出模式推挽输出、开漏输出、复用推挽输出、复用开漏输出。上下拉电阻上拉电阻下拉电阻输入模式 模拟输入、浮空输入、上拉输入、下拉输入 模拟输入:I/O端口的模拟信号(电压信号…...
数据结构_ 堆结构与堆排序(c++ 实现 + 完整代码 )
堆结构与堆排序 文章目录堆结构与堆排序引入堆堆结构所满足的数学特性准备代码----------- 往堆中插入元素----------- 删除堆顶堆排序构建完整代码及测试动态分配版本非动态版本引入堆 二叉树 具有左孩子与右孩子的最普通的二叉树。 满二叉树 特殊的二叉树:每个节…...
【MySQL】sql中explain解释和应用
这里写目录标题学习原因MySQL中explain的使用和用法解释explain的使用explain 运行结果的意义文字展示表格展示参考资料:结束语学习原因 在对sql的优化过程中使用了explain对指定的sql进行查看它的运行效果,以便找出sql的性能特点并进行优化 MySQL中ex…...
从零实现深度学习框架:Seq2Seq从理论到实战【实战篇】
来源:投稿 作者:175 编辑:学姐 往期内容: 从零实现深度学习框架1:RNN从理论到实战(理论篇) 从零实现深度学习框架2:RNN从理论到实战(实战篇) 从零实现深度…...
【数据结构入门】-链表之单链表(1)
个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 文章标题回顾链表链表的概念及结构各种节点打印链表尾插创建节点尾删头插头删查找在pos…...
Docker竟如此简单!
文章目录什么是容器?容器隔离何为“边界”?容器和虚拟机一样吗?基于 Linux Namespace 隔离机制的弊端容器限制何为“限制”?Cgroups 对资源的限制能力缺陷单进程模型容器镜像容器的诞生容器的一致性何为“层(layer&…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
