C++--iomanip库

news2025/2/14 3:10:15

目录

1. 设置字段宽度:std::setw()

2. 设置浮点数精度:std::setprecision()

3. 设置填充字符:std::setfill()

4. 控制对齐方式:std::left 和 std::right,std::internal

5. 控制进制输出:std::hex、std::dec、std::oct

6. 显示进制前缀:std::showbase 、大写输出:std::uppercase

7. 控制布尔值输出格式:std::boolalpha

8. 显示正号+:std::showpos

9. 针对浮点型:std::fixed,std::scientific

10. 解除设置,恢复默认格式:std::resetiosflags()

11. 设置读取字符数:setw()

12. 保存与恢复流状态:std::ios::fmtflags


          <iomanip> 是 C++ 标准库中的一个头文件,用于控制输入输出的格式。它提供了一些流操作符(manipulators),可以帮助你更方便地格式化输出,比如设置宽度、精度、填充字符等。

        以下是 `<iomanip>` 中一些常用的操作符:

1. 设置字段宽度:std::setw()

        - 用于设置输出的宽度。

     #include <iostream>
     #include <iomanip>
     int main() {
         std::cout << std::setw(10) << 123 << std::endl; // 输出宽度为10,右对齐
         return 0;
     }

     输出:
     ```
           123
     ```

2. 设置浮点数精度:std::setprecision()

        - 用于设置浮点数输出的精度(小数点后的位数)。

     #include <iostream>
     #include <iomanip>
     int main() {
         double pi = 3.1415926535;
         std::cout << std::setprecision(4) << pi << std::endl; // 输出3.142
         return 0;
     }

3. 设置填充字符:std::setfill()

        - 用于设置填充字符,通常与std::setw 一起使用。

    #include <iostream>
     #include <iomanip>
     int main() {
         std::cout << std::setw(10) << std::setfill('*') << 123 << std::endl; 
         // 输出*******123
         return 0;
     }

4. 控制对齐方式:std::left 和 std::right,std::internal

        - std::left:左对齐。

        - std::right:右对齐(默认)。

        - std::internal:针对数值右对齐,如针对-123,可对齐为-****123。

     #include <iostream>
     #include <iomanip>
     int main() {
         std::cout << std::left << std::setw(10) << 123 << std::endl;  // 左对齐
         std::cout << std::right << std::setw(10) << 123 << std::endl; // 右对齐
         return 0;
     }
    #include <iostream>
    #include <iomanip>
    int main() {
        int num = -123;
        std::cout << std::setw(8) << std::internal << std::setfill('*') << num << std::endl; // 输出 -***123
        return 0;
    }

5. 控制进制输出:std::hex、std::dec、std::oct

        - std::hex:输出十六进制。

        - std::dec:输出十进制(默认)。

        - std::oct:输出八进制。


     #include <iostream>
     #include <iomanip>
     int main() {
         int num = 255;
         std::cout << std::hex << num << std::endl; // 输出ff
         std::cout << std::dec << num << std::endl; // 输出255
         std::cout << std::oct << num << std::endl; // 输出377
         return 0;
     }

6. 显示进制前缀:std::showbase 、大写输出:std::uppercase

    #include <iostream>
    #include <iomanip>
    int main() {
        int num = 255;
        std::cout << std::showbase << std::uppercase << std::hex << num << std::endl; 
        // 输出 0XFF
        return 0;
    }

7. 控制布尔值输出格式:std::boolalpha

        - 将布尔值输出为 true/false,而不是 1/0。

     #include <iostream>
     int main() {
         bool flag = true;
         std::cout << std::boolalpha << flag << std::endl; // 输出true
         return 0;
     }

8. 显示正号+:std::showpos

        - showpos 强制正数输出时显示正号。

        代码示例如8图.

9. 针对浮点型:std::fixed,std::scientific

        - fixed 针对浮点型变量以固定的小数位数进行输出的设置。(又称定点表示法)

        - scientific 针对浮点型变量以科学计数法的形式输出。

    #include <iostream>
    #include <iomanip>
    int main() {
        double num = 123.456;
        // 强制显示正号,定点表示法,保留两位小数
        std::cout << std::showpos << std::fixed << std::setprecision(2) << num << std::endl; 
        // 输出 +123.46
        return 0;
    }
    #include <iostream>
    #include <iomanip>
    int main() {
        double num = 123.456789;
        std::cout << std::fixed << std::setprecision(3) << num << std::endl;      
        // 123.457
        std::cout << std::scientific << std::setprecision(3) << num << std::endl; 
        // 1.235e+02
        return 0;
    }

         科学计数法:编程中的科学计数法

        另外,有fixed参与的设置(如上的 std::showpos << std::fixed << std::setprecision(2))还会作用于以后的所有代码,所以需要搭配 std::resetiosflags(std::ios::fixed) 来解除。

10. 解除设置,恢复默认格式:std::resetiosflags()

        - 恢复默认格式。

    #include <iostream>
    #include <cstdio>
    #include <iomanip>
    using namespace std;

    int main()
    {
        int n = 7;
        double m = 3.1415926;   //重点关注 m 的输出变化
        cout << fixed << setprecision(2) << n << endl;  //7
        cout << m << endl;  //3.14
        cout << n << endl;  //7
        cout << resetiosflags(ios::fixed) << n << endl; //7
        cout << m << endl;  //3.1415926
    }

11. 设置读取字符数:setw()

         - 限制读取的字符数。

    #include <iostream>
    #include <iomanip>
    int main() {
        char buffer[10];
        std::cout << "输入一个单词(最多4字符):";
        std::cin >> std::setw(5) >> buffer; // 防止缓冲区溢出
        std::cout << "读取的内容:" << buffer << std::endl;
        return 0;
    }

12. 保存与恢复流状态:std::ios::fmtflags

        - 这是个数据类型,用于修改流后,对这修改方案的保存。

    #include <iostream>
    #include <iomanip>
    int main() {
        std::ios::fmtflags original_flags = std::cout.flags(); // 保存原始状态
        std::cout << std::hex << std::showbase << 255 << std::endl; // 输出 0xff
        std::cout.flags(original_flags); // 恢复状态
        std::cout << 255 << std::endl;   // 输出 255(十进制)
        return 0;
    }

        其成员函数有三,

        - flags,用于获取当前的输出流格式,

std::ios::fmtflags flags = std::cout.flags(); 

        - setf(...),用于设定格式标志,如hex、showbase等,

std::cout.setf(std::ios_base::hex, std::ios_base::basefield); std::cout.setf(std::ios_base::showbase);

        - unsetf(),用于清除指定格式标志,重置为默认值,

    #include <iostream>

    int main() {
        // 设置格式标志
        std::cout.setf(std::ios::hex, std::ios::basefield);
        std::cout.setf(std::ios::showbase);

        // 输出一个整数
        std::cout << 42 << std::endl;

        // 关闭设置的格式标志
        std::cout.unsetf(std::ios::hex);
        std::cout.unsetf(std::ios::showbase);

        return 0;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2297675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习(李宏毅)——self-Attention

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记&#xff0c;感谢台湾大学李宏毅教授的课程&#xff0c;respect&#xff01;&#xff01;&#xff01; 二、大纲 何为self-Attention&#xff1f;原理剖析self-Attention VS CNN、RNN、GNN 三、何为self-Attenti…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

伺服报警的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是设置伺服报警信号的…

蓝桥杯-洛谷刷题-day5(C++)(为未完成)

1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"&#xff1…

LVS 负载均衡集群(NAT模式)

一、环境准备 四台主机&#xff08;一台 LVS、两台 RS、一台客户端&#xff09; 1.1.LVS 主机 LVS 主机&#xff08;两块网卡&#xff09; 第一块&#xff1a;NAT模式&#xff08;内网&#xff09; 第二块&#xff1a;添加网卡&#xff08;仅主机模式&#xff09;&#xff0…

解决 DeepSeek 官网服务器繁忙的实用方案

解决 DeepSeek 官网服务器繁忙的实用方案 大家在使用 DeepSeek 时&#xff0c;是不是经常遇到官网服务器繁忙&#xff0c;等半天都加载不出来的情况&#xff1f;别担心&#xff0c;今天就给大家分享一个用 DeepSeek 硅基流动 Cherry Studio 解决这个问题的实用方案&#xff…

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…

#渗透测试#批量漏洞挖掘#LiveBos UploadFile 任意文件上传漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 漏洞背景 漏洞成因 影响评估 检测方案 …

ds-download-link 插件:以独特图标选择,打造文章下载链接

源码介绍 “ds-download-link”插件为 WordPress 网站提供了在文章编辑器中添加下载链接的功能&#xff0c;每个下载链接都支持图标选择&#xff0c;并能将这些链接以美观的样式展示在文章前端页面。以下是该插件的主要特性和功能&#xff1a; 后台功能 在文章编辑器下方添加…

判断函数是否为react组件或lazy包裹的组件

function Modal(){return <p>123</p> } 实参里填入函数名,是false 实参里填入标签形式的函数,是true isValidElement(Modal)//false isValidElement(<Modal></Modal>)//true 官方说明 isValidElement – React 中文文档 但是官方并不建议用isValidE…

PHP 中的除以零错误

除以零错误&#xff08;Division by zero&#xff09;是指数字除以零的情况&#xff0c; 这在数学上是未定义的。在 PHP 中&#xff0c;处理这种错误的方式取决于 PHP 版本&#xff1a; PHP 7&#xff1a; 使用 / 运算符会产生一个警告 (E_WARNING) 并返回 false。 使用 intd…

【QT】控件 -- 多元素类 | 容器类 | 布局类

&#x1f525; 目录 一、多元素类1. List Widget -- 列表2. Table Widget -- 表格3. Tree Widget -- 树形 二、容器类1. Group Box -- 分组框2. Tab Widget -- 标签页 三、布局类1. 垂直布局【使用 QVBoxLayout 管理多个控件】【创建两个 QVBoxLayout】 2. 水平布局【使用 QHBo…

NO.15十六届蓝桥杯备战|while循环|六道练习(C++)

while循环 while语法形式 while 语句的语法结构和 if 语句⾮常相似&#xff0c;但不同的是 while 是⽤来实现循环的&#xff0c; if 是⽆法实现循环的。 下⾯是 while 循环的语法形式&#xff1a; //形式1 while ( 表达式 )语句; //形式2 //如果循环体想包含更多的语句&a…

kotlin标准库里面也有很多java类

Kotlin 标准库中确实存在许多与 Java 类直接关联或基于 Java 类封装的结构&#xff0c;但这并不是“问题”&#xff0c;而是 Kotlin 与 JVM 生态深度兼容和互操作性的体现。以下从技术原理和设计哲学的角度详细解释&#xff1a; 一、Kotlin 与 JVM 的底层关系 Kotlin 代码最终…

Flutter 双屏双引擎通信插件加入 GitCode:解锁双屏开发新潜能

在双屏设备应用场景日益丰富的当下&#xff0c;移动应用开发领域迎来了新的机遇与挑战。如何高效利用双屏设备优势&#xff0c;为用户打造更优质的交互体验&#xff0c;成为开发者们关注的焦点。近日&#xff0c;一款名为 Flutter 双屏双引擎通信插件的创新项目正式入驻 GitCod…

01、单片机上电后没有正常运行怎么办

单片机上电后没有运转, 首先要检查什么? 1、单片机供电是否正常? &电路焊接检查 如果连最基本的供电都没有,其它都是空谈啊!检查电路断路了没有?短路了没有?电源合适吗?有没有虚焊? 拿起万用表之前,预想一下测量哪里?供电电压应该是多少?对PCB上电压测量点要…

使用 EMQX 接入 LwM2M 协议设备

LwM2M 协议介绍 LwM2M 是一种轻量级的物联网设备管理协议&#xff0c;由 OMA&#xff08;Open Mobile Alliance&#xff09;组织制定。它基于 CoAP &#xff08;Constrained Application Protocol&#xff09;协议&#xff0c;专门针对资源受限的物联网设备设计&#xff0c;例…

使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群

MongoDB 是支持客户端与 MongoDB 服务器之间启用 TLS/SSL 进行加密通讯的, 对于 MongoDB 副本集和分片集群内部的通讯, 也可以开启 TLS/SSL 认证. 本文会使用 mkcert 创建 TLS/SSL 证书, 基于创建的证书, 介绍 MongoDB 副本集、分片集群中启动 TLS/SSL 通讯的方法. 我们将会在…

P3372 【模板】线段树 1【题解2】

本题题解分两篇 此篇为第贰篇&#xff0c;用树状数组做 第壹篇&#xff1a;P3372 【模板】线段树 1【题解1】 本文讲解树状数组解决区间修改区间查询 其它树状数组相关文章&#xff1a; 树状数组讲解单点修改/查询树状数组解决区间修改单点查询 P3372 【模板】线段树 1 题…

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者&#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪&#xff0c;而无需任何代码更改。 介绍 去年&#xff0c;我们宣布了 OpenTelemetry…