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

C++ 学习(2) ---- std::cout 格式化输出

目录

        • std::cout 格式化输出简介
        • 使用成员函数
        • 使用流操作算子

std::cout 格式化输出简介

C++ 通常使用cout输出数据,和printf()函数相比,cout实现格式化输出数据的方式更加多样化;
一方面,cout 作为 ostream 类的对象,该类中提供有一些成员方法,可实现对输出数据的格式化;另一方面,为了方面用户格式化输出数据,C++ 标准库专门提供了一个 <iomanip> 头文件,该头文件中包含有大量的格式控制符,也就是流操作算子,使用上更加方便;
cout 格式化输出有两种方法,一种是直接使用成员函数,另一种是使用流操作算子,下面分别进行介绍:

使用成员函数

cout 的基类是 ostream 类,ostream 类 中还包含一些可实现格式化输出的成员方法,这些成员方法都是从 ios 基类(以及 ios_base类)中继承来的,cout(以及 cerrclog)也能调用:

成员函数说明
flags(fmtfl)当前的格式全部替换为fmtfl,fmtfl 可以是一种格式,也可以是多种格式
precision(n)设置输出浮点数的精度为 n
width(w)指定输出宽度为 w 个字符
fill(c)在指定输出宽度的情况下,输出宽度不足用 c 填充
setf(fmtfl, mask)在当前格式的基础上,追加 fmtfl 格式,并且删除 mask 格式,其中mask参数可以省略
unsetf(mask)在当前格式的基础上,删除 mask 格式

对于上面函数中的 flags 函数的fmtfl参数,setf() 函数中的 fmtfl 参数以及 unsetf() 函数可以选择下面的值:

标志作用
ios::boolapha把 true 和 false 输出为字符串
ios::left输出数据在本域宽范围内向左对齐
ios::right输出数据在本域宽范围内向右对齐
ios::internal数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec设置整数的基数为 10
ios::oct设置整数的基数为 8
ios::hex设置整数的基数为 16
ios::showbase强制输出整数的基数(八进制数以 0 开头,十六进制数以 0x 打头)
ios::showpoint强制输出浮点数的小点和尾数 0
ios::uppercase在以科学记数法格式 E 和以十六进制输出字母时以大写表示
ios::showpos对正数显示“+”号
ios::scientific浮点数以科学记数法格式输出
ios::fixed浮点数以定点格式(小数形式)输出
ios::unitbuf每次输出之后刷新所有的流

setf(fmtfl, mask)unsetf(fmtfl, mask) 中的mask 参数,可以传递为下面的几个:

标志作用
ios::adjustfieldios::left , ios::right , ios::internal
ios::basefieldios::dec ,ios::oct ,ios::hex
ios::floatfieldios::scientific , ios::fixed

使用 cout 成员函数的示例程序如下:

bool testCoutUsingflags() {{// setf(fmt,mask) 在当前格式的基础上追加 fmt flag, 并且删除 mask 格式std::cout.setf(std::ios::boolalpha);bool a = true;std::cout << "bool a:" << a << std::endl;int m = 100;std::cout.setf(std::ios::hex, std::ios::basefield);std::cout << "int m:" << m << " bool a " << a << std::endl;// 去除相应的标志std::cout.unsetf(std::ios::boolalpha);std::cout << "hex print int m:" << m << " bool a " << a << std::endl;std::cout.setf(std::ios::dec, std::ios::basefield);int n = 0x110;std::cout << "dec print int n:" << n << std::endl;std::cout.setf(std::ios::oct, std::ios::basefield);std::cout.setf(std::ios::showbase);std::cout << "oct print int n:" << n << std::endl;}{std::cout.setf(std::ios::fixed, std::ios::floatfield);float f = 1 / 3.0f;std::cout << "float f in fixed is:" << f << std::endl;std::cout.precision(10);std::cout << "float f precision 10 in fixed is:" << f << std::endl;std::cout.setf(std::ios::scientific, std::ios::floatfield);std::cout.precision(3);std::cout << "float f in scientific is:" << f << std::endl;std::cout.setf(std::ios::uppercase);std::cout << "float f in scientific uppercase is:" << f << std::endl;}{std::cout.width(50);std::cout.fill('_');std::cout.setf(std::ios::left, std::ios::adjustfield);std::cout << "this is my demo" << std::endl;std::cout.unsetf(std::ios::adjustfield);std::cout.width(50);std::cout.fill('_');std::cout.setf(std::ios::right, std::ios::adjustfield);std::cout << "this is my demo" << std::endl;}return true;
}

输出结果如下:

bool a:true
int m:64 bool a true
hex print int m:64 bool a 1
dec print int n:272
oct print int n:0420
float f in fixed is:0.333333
float f precision 10 in fixed is:0.3333333433
float f in scientific is:3.333e-01
float f in scientific uppercase is:3.333E-01
this is my demo___________________________________
this is my demo
this is my demo
使用流操作算子

流操作算子实在iomanip中定义的,要使用这些流操作算子,必须包含此头文件:

注意下面的 *号,表示默认使用的算子,比如: 在默认情况下,整数使用十进制形式输出

流操作算子作用
*dec以十进制形式输出整数
hex以十六进制形式输出整数
oct以八进制形式输出整数
fixed以小数形式输出浮点数
scientific以科学计数法计数形式输出浮点数
left左对齐,宽度不足的时候填充字符到右边
*right右对齐,宽度不足的时候填充字符到左边
setbase(b)设置输出整数的进制,b=8、10或者16
setw(w)指定输出宽度为w个字符,或者输入字符串读取w个字符
setfill(c)指定输出宽度的情况下,输出宽度不足用字符c填充(默认是使用空格填充)
setprecision(n)输出浮点数的精度为 n, 就是小数点后应该暴露的位数
boolaplha把 true 和 false 输出为字符串
noboolalpha把true 和 false 输出为0,1
showbase输出数值进制的前缀
noshowbase不输出数值进制的前缀
showpoint总是输出小数点
*noshowpoint只有当小数部分存在时才显示小数点
showpos在非负数中显示+
*noshowpos在非负数中不显示+
uppercase十六进制使用 A~E,设置显示前缀,那么前缀输出为0X
*nouppercase十六进制使用 a~e,设置显示前缀,那么前缀输出为0x

使用流操作算子控制输出的综合程序如下:

bool testCoutUsingStreamflags() {// stream operation flag will take effect all time util you set another flagbool a = false;std::cout << "bool a:" << std::boolalpha << a << std::endl;std::cout << "bool a:" << std::noboolalpha << a << std::endl;// showbase and dec oct & hexint m = 80;std::cout <<"dec int m:" << std::dec << std::showbase << m << std::endl;std::cout << "hex int m:" << std::hex << std::showbase << m << std::endl;std::cout << "oct int m:" << std::oct << std::showbase << m << std::endl;// std::showpos 显示 + -std::cout << "dec int m:" << std::dec << std::showbase << std::showpos << m << std::endl;// setw and setfillstd::cout << std::left << std::setw(50) << std::setfill('_') << "hello world" << std::endl;std::cout << std::right << std::setw(50) << std::setfill('_') << "hello world" << std::endl;std::cout << std::internal << std::setw(50) << std::setfill('_') << "hello world m:" << m << std::endl;std::cout << std::noshowpos << std::endl;int n = 100;std::cout << std::setbase(16) << std::showbase << "int n:" << n << std::endl;float f = 1 / 3.0f;// 0.333333std::cout << std::fixed << "f = " << f << std::endl;// 0.33333std::cout << std::fixed << std::setprecision(5) << "f = " << f << std::endl;// 3.33333e-1std::cout << std::scientific << std::setprecision(5) << "f = " << f << std::endl;// 3.33333E-1std::cout << std::scientific << std::uppercase << std::setprecision(5) << "f = " << f << std::endl;// std::showpoint 强制输出浮点数的小点和尾数0 std::cout << std::fixed << std::showpoint << std::setprecision(5) << "f = " << f << std::endl;{// print pointer 指针有做特殊的处理int* ptr = new int(10);std::cout << std::showbase << std::hex << ptr << std::endl;std::cout << std::showbase << std::hex << reinterpret_cast<intptr_t*>(ptr) << std::endl;delete ptr;}return true;
}

输出结果如下:

basic test main enter
basicCplusplusCout::testbasicCplusplusCoutImpl enter
bool a:false
bool a:0
dec int m:80
hex int m:0x50
oct int m:0120
dec int m:+80
hello world_______________________________________
_______________________________________hello world
____________________________________hello world m:+80int n:0x64
f = 0.333333
f = 0.33333
f = 3.33333e-01
f = 3.33333E-01
f = 0.33333
000001E419046150
000001E419046150

相关文章:

C++ 学习(2) ---- std::cout 格式化输出

目录 std::cout 格式化输出简介使用成员函数使用流操作算子 std::cout 格式化输出简介 C 通常使用cout输出数据&#xff0c;和printf()函数相比&#xff0c;cout实现格式化输出数据的方式更加多样化&#xff1b; 一方面&#xff0c;cout 作为 ostream 类的对象&#xff0c;该类…...

前端拿不到Long类型成员变量,用@JsonSerialize(using = ToStringSerializer.class)序列化一下

EqualsAndHashCode(callSuper true) Data TableName("la_school_business") Schema(description "商务负责人表") public class SchoolBusiness extends BaseEntity {private static final long serialVersionUID -7124481085999629236L;/*** 商务负责人…...

JWT登录校验流程

jwt令牌的基本概念&#xff1a; 1. JWT&#xff08;JSON Web Token&#xff09; 定义&#xff1a;JWT 是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在各方之间作为 JSON 对象安全地传输信息。它可以被验证和信任&#xff0c;因为它是数字签名的。结构&am…...

yarn安装和部署

文章目录 概述安装部署1.构建项目2.测试3.清理构建目录 小结 概述 yarn是一个快速、可靠和安全的JavaScript包管理工具&#xff0c;由Facebook开发。它被设计用来替代npm&#xff08;Node Package Manager&#xff09;&#xff0c;尽管它与npm在很多方面兼容。yarn提供了以下一…...

Visual Studio的安装教程与使用方法

Visual Studio的安装教程与使用方法 一、Visual Studio的安装教程 1. 准备工作 确认系统要求&#xff1a; 在开始安装Visual Studio之前&#xff0c;请确保您的计算机满足Visual Studio的系统要求这。包括操作系统版本、内存、硬盘空间等。您可以在Visual Studio的官方网站…...

一键换装软件哪个好?6个换装工具让你秒变穿搭达人

#紫色跑道的city穿搭#火了&#xff0c;很多人都开始打卡各种紫色穿搭&#xff0c;展示自己的时尚态度。 但对于没有时间或金钱去精心搭配的我们来说&#xff0c;有没有一种更简单、更快捷的方式&#xff0c;让我们也能轻松跟上潮流呢&#xff1f; 当然有&#xff01;今天&…...

【EtherCAT】Windows+Visual Studio配置SOEM主站——源码配置

目录 一、准备工作 1. Visual Studio 2022 2. Npcap 1.79 3. SOEM源码 二、源码部署 1. 新建Visual Studio工程 2. 创建文件夹 3. 创建主函数 4. 复制源代码 5. 删除无关项 6. 将soem源码添加进工程 7. 添加soem头文件 8. 配置头文件路径 9. 配置静态库和静态库路…...

GPTPDF深度解析:开源文档处理技术全攻略

GPTPDF深度解析&#xff1a;开源文档处理技术全攻略 在数字化信息时代&#xff0c;PDF文件因其稳定性和跨平台兼容性&#xff0c;已成为学术交流、技术文档和电子书籍等领域的首选格式。然而&#xff0c;PDF文档的处理和内容提取一直是一个难题。随着人工智能技术的飞速发展&a…...

网络学习:应用层DNS域名解析协议

目录 一、简介 二、工作流程 一、简介 DNS( Domain Name System)是“域名系统”的英文缩写&#xff0c;是一种组织成域层次结构的计算机和网络服务命名系统&#xff0c;它用于TCP/IP网络&#xff0c;它所提供的服务是用来将主机名和域名转换为IP地址的工作。 同时,DNS…...

7.怎么配置一个axios来拦截前后端请求

首先创建一个axios.js文件 导入我们所需要的依赖 import axios from "axios"; import Element from element-ui import router from "./router"; 设置请求头和它的类型和地址 注意先注释这个url,还没有解决跨域问题,不然会出现跨域 // axios.defaults.…...

Day17_1--AJAX学习之GET/POST传参

AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。其实AJAX就可以理解为就是JS。通过AJAX也就实现了前后端分离&#xff0c;前端只写页面&#xff0c;后端生成数据&#xff01; 现在开始通过实例学习&#xff1a; 1--GET传参 <!…...

golang国内proxy设置

go env -w GOPROXYhttps://goproxy.cn,direct经常使用的两个, goproxy.cn 和 goproxy.io 连接分别是 https://goproxy.cn https://goproxy.io 如果遇到某些包下载不下来的情况&#xff0c;可尝试更换数据源 更推荐使用https://goproxy.cn 速度快&#xff0c;缓存的包多 提醒…...

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程&#xff1a;31 Python 的内置数据类型-对象 Object 和类型 Type 摘要&#xff1a; Python 中的对象和类型是一个非常重要的概念。在 Python 中,一切都是对象,包括数字、字符串、列表等,每个对象都有自己的类型。 原文链接&#xff1a; Fre…...

【mongodb】mongodb副本集的搭建和使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

Java后端面试复习7.24

lock加锁解锁尝试获取锁方法lock底层基于什么实现lock和lock的底层实现分别面向什么用户lock和synchronized异同如何选择合适的锁ReentrantLock如何实现冲入内部类三个公平和非公平获取锁怎么实现的RL默认公平还是非公平&#xff0c;构造参数ReentrantRedaWriteLock的特性什么是…...

前端 HTML 概述

目录 1. HTML概述 1.1 超文本标记语言 1.2 标签 2. HTML 解析与编辑 2.1 解析与访问 2.2 编辑 html文件 1. HTML概述 HTML&#xff08; Hyper Text Markup Language&#xff1a;超文本标记语言 &#xff09;&#xff1a;主要用于网页主体结构的搭建&#xff0c;在网页上…...

探索Thymeleaf:用动态Web模板引擎打造吸引人的用户界面(SpringBoot的html详解)

什么是Thymeleaf&#xff1f; Thymeleaf是一个用于Web和独立环境的现代服务器端Java模板引擎&#xff0c;用于处理XML/XHTML/HTML5内容。它特别适合基于Spring框架的Web应用程序&#xff0c;因为它提供了与Spring MVC的出色集成。Thymeleaf以其自然的模板语法和强大的数据绑定…...

视频教程 - 自研Vue3 Tree组件高级功能:虚拟滚动新增节点实现自动滚动

感谢小伙伴们对本套自研vue3 tree组件教程的关注&#xff0c;在前一篇媲美Element Plus JuanTree终极实战&#xff1a;虚拟滚动的功能演示中发现了小bug&#xff0c;特地整理了相关录屏来说明怎么一步步解决bug的&#xff0c;来回馈小伙伴们的支持。 Tree组件高级功能&#xff…...

职业生涯阶段总结3:转眼毕业三年

不知不觉&#xff0c;科班毕业三年多了&#xff0c;也换了三个单位了&#xff1b; 个人软件开发的理论和技术能力确实比以前刚出来的时候&#xff0c;强了不少&#xff1b; 在行情越发下滑的形势&#xff0c;似乎只有进大厂才能拿到不错的收入&#xff0c;但是大厂的压力也是比…...

项目经理面试总结

先上结论&#xff1a;每个公司问的问题侧重点都不太一样&#xff0c;五花八门&#xff0c;评判标准也不一样&#xff0c;目前我能感觉到的就是自己需要很了解项目&#xff0c;也就是工作过程中经常做出总结&#xff0c;需要你经常去思考&#xff0c;包括对内和对外的思考。 自我…...

深度解析:如何高效提取冒险岛WZ游戏资源的技术方案

深度解析&#xff1a;如何高效提取冒险岛WZ游戏资源的技术方案 【免费下载链接】WzComparerR2 Maplestory online Extractor 项目地址: https://gitcode.com/gh_mirrors/wz/WzComparerR2 WzComparerR2是一款专业的冒险岛游戏资源提取工具&#xff0c;基于C#和.NET技术栈…...

Godot XR Tools:加速VR/AR开发的模块化工具集与实战指南

1. 项目概述&#xff1a;Godot XR Tools 是什么&#xff1f; 如果你正在用 Godot 引擎捣鼓 VR 或 AR 项目&#xff0c;大概率会遇到一些“通用但繁琐”的问题&#xff1a;怎么让虚拟手自然地抓取物体&#xff1f;怎么实现一个稳定可靠的传送移动机制&#xff1f;UI 界面在 3D …...

AI原生项目管理工具Roadmap Skill:基于MCP协议实现本地化任务协同

1. 项目概述&#xff1a;一个为AI Agent设计的本地化项目管理工具如果你和我一样&#xff0c;每天都在和Claude、Cursor这类AI助手打交道&#xff0c;一边写代码一边规划项目&#xff0c;那你肯定也遇到过这样的困境&#xff1a;脑子里蹦出一个绝妙的想法&#xff0c;或者AI助手…...

基于Clean Architecture与CQRS的银行信贷系统后端架构实战

1. 项目概述&#xff1a;一个基于Clean Architecture与CQRS的银行信贷系统后端 最近在梳理企业级应用架构时&#xff0c;我重新审视并重构了一个银行信贷系统的后端项目。这个项目不是一个简单的CRUD演示&#xff0c;而是一个力求贴近真实生产环境、强调架构清晰度和可维护性的…...

开源免费的WPS AI 软件 察元AI文档助手:链路 041:mergeTaskOrchestrationData 写入任务元数据

链路 041&#xff1a;mergeTaskOrchestrationData 写入任务元数据 总体链路图 下图在全系列各篇保持一致&#xff0c;仅通过高亮样式标示本篇所覆盖的环节&#xff1b;箭头表示主成功路径&#xff0c;点线为异常或可选路径。阅读任意一篇时都应能回到本图定位&#xff0c;避免…...

轻量级进程守护工具openclaw-warden:极简配置与自动化运维实践

1. 项目概述与核心价值最近在折腾一些自动化任务时&#xff0c;发现了一个挺有意思的项目&#xff0c;叫openclaw-warden。乍一看这个名字&#xff0c;可能会联想到“看门狗”或者“守卫者”&#xff0c;没错&#xff0c;它的核心定位就是一个轻量级的、开源的守护进程管理器。…...

从尖叫到安静:一个电机小白的FOC电流环PI参数实战调参笔记(含计算法与经验法对比)

从尖叫到安静&#xff1a;一个电机小白的FOC电流环PI参数实战调参笔记&#xff08;含计算法与经验法对比&#xff09; 第一次给永磁同步电机上电时&#xff0c;那刺耳的啸叫声让我差点摔了开发板——这大概是所有FOC初学者共同的噩梦。作为从Arduino PWM调速一路摸爬滚打过来的…...

Cursor破解工具终极指南:3步轻松解除AI编程限制

Cursor破解工具终极指南&#xff1a;3步轻松解除AI编程限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial req…...

别急着用T检验!用Python做数据分析前,先花5分钟检查这4个前提

别急着用T检验&#xff01;用Python做数据分析前&#xff0c;先花5分钟检查这4个前提 数据分析师们常常陷入一个误区&#xff1a;拿到数据就迫不及待地运行T检验&#xff0c;仿佛这个统计工具是解决所有均值比较问题的万能钥匙。但真实世界的数据往往比教科书复杂得多——我曾在…...

家庭暴力预警程序,报警,调解记录上链,为庇护,起诉,提供证据。

定位为 “区块链在社会治理与司法辅助中的应用示例”。一、实际应用场景描述在家庭暴力&#xff08;Domestic Violence, DV&#xff09;案件中&#xff0c;受害者常面临以下问题&#xff1a;- 暴力行为多为私密空间发生- 证据易灭失&#xff08;聊天记录删除、伤情恢复&#xf…...