IO之cout格式控制

目录

简单了解cout是什么?

什么是字节流

默认格式控制

修改计数系统

调整字符宽度

填充字符

设置浮点数显示精度

打印末尾的0和小数点

其他格式控制符

        right--->设置为右对齐,永久生效

        left--->设置为左对齐,永久生效

        fixed--->固定以小数显示浮点数,永久生效

        scientific--->固定以科学计数法显示浮点数,永久生效


简单了解cout是什么?

        cout是ostream类的一个对象,叫做标准输出流对象;cin是istream类的一个对象,叫做标准输入流对象;iostream类继承了ostream和istream;当程序包含<iostream>时,自动在命名空间std中创建对象cout和cin。

什么是字节流

        字节流大概就是一个个字节组成的队列。
        c++的输入输出是面向字节流的。输入时,程序从输入流中取数据;输出时,程序将数据插入到输出流中。可以理解为c++输入输出的单位是单个字节。

int a = 123;
cout << a;

        此处 a 是 int 类型,占4个字节,底层是32个二进制位。如果一个字节一个字节的取数据,不可能取到1 2 3这三个数,然后插入输出流进而显示到显示器上。ostream类将数据的底层二进制转化为由一个个字符字节组成的输出流。 理解这一点很重要。

默认格式控制

  • 对于char值,如果它代表的是可打印字符,则将被作为一个字符显示在宽度为一个字符的字段中。 
  • 对于数值整型,将以十进制方式显示在一个刚好容纳该数字及负号(如果有的话)的字段中。
  •  字符串被显示在宽度等于该字符串长度的字段中。
  • 浮点类型被显示为6位,末尾的0不显示(注意,显示的数字位数与数字被存储时精度没有任何关系)。数字以定点表示法显示还是以科学计数法表示,取决于它的值。当指数大于等于6或小于等于-5时,将使用科学计数法表示。另外,字段宽度恰好容纳数字和负号(如果有的话)。
#include <iostream>int main()
{using std::cout;cout << "12345678901234567890\n";char ch = 'K';int t = 273;cout << ch << ":\n";cout << t << ":\n";cout << -t <<":\n";double f1 = 1.200;cout << f1 << ":\n";cout << (f1 + 1.0 / 9.0) << ":\n";double f2 = 1.67E2;cout << f2 << ":\n";f2 += 1.0 / 9.0;cout << f2 << ":\n";cout << (f2 * 1.0e4) << ":\n";double f3 = 2.3e-4;cout << f3 << ":\n";cout << f3 / 10 << ":\n";// std::cin.get();return 0; 
}

修改计数系统

#include <iostream>
int main()
{using namespace std;cout << "Enter an integer: ";int n;cin >> n;cout << "n     n*n\n";cout << n << "     " << n * n << " (decimal)\n";
// set to hex modecout << hex;  //以16进制输出cout << n << "     ";cout << n * n << " (hexadecimal)\n";// set to octal modecout << oct << n << "     " << n * n << " (octal)\n";//以八进制输出// alternative way to call a manipulatordec(cout);//以十进制输出cout << n << "     " << n * n << " (decimal)\n";// cin.get();// cin.get();return 0; 
}

        代码说明:

  • ostream重载了<<运算符,cout<<hex等价于hex(cout)
  • hex(cout)场景下,hex看做是一个函数
  • cout << hex场景下,hex看做一个输出控制符;这一点与flush一个道理(不了解flush的可以看如何刷新缓冲区(c++、c、linux)-CSDN博客)
  • 后续的oct、dec同样的道理
  • 一旦使用计数控制符(hex、oct、hec)除非下次修改,否则一直处在这个状态

调整字符宽度

        int width(int i):将字符宽度设置为i个空格,并返回原始默认字符宽度。需要简单说明的是:width是iostream类的一个成员函数。注意:width()只影响下一次操作,紧接着就变为默认值。 c++中字符宽度默认值是0。在输出时真实字符宽度,会选择设置字符宽度与完全显示所需字符宽度,的最大值。

#include <iostream>int main()
{using std::cout;int w = cout.width(30);cout << "default field width = " << w << ":\n";cout.width(5);cout << "N" <<':';cout.width(8);cout << "N * N" << ":\n";for (long i = 1; i <= 100; i *= 10){cout.width(5);cout << i <<':';cout.width(8);cout << i * i << ":\n";}// std::cin.get();return 0; 
}

填充字符

        在默认情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符。cout.fill()会影响后续所有操作

#include <iostream>int main()
{using std::cout;cout.fill('*');const char * staff[2] = { "Waldo Whipsnade", "Wilmarie Wooper"};long bonus[2] = {900, 1350};for (int i = 0; i < 2; i++){cout << staff[i] << ": $";cout.width(7);cout << bonus[i] << "\n";}// std::cin.get();return 0; 
}

设置浮点数显示精度

        这里的浮点数显示精度是指:显示的总位数。c++默认的浮点数显示精度为6位,末尾的0不显示。precision()成员函数用于修改浮点数显示精度,末尾的0同样不显示。永久有效

#include <iostream>int main()
{using std::cout;float price1 = 20.40;float price2 = 1.9 + 8.0 / 9.0;cout << "\"Furry Friends\" is $" << price1 << "!\n";cout << "\"Fiery Fiends\" is $" << price2 << "!\n";cout.precision(2);cout << "\"Furry Friends\" is $" << price1 << "!\n";cout << "\"Fiery Fiends\" is $" << price2 << "!\n";cout.precision(7);cout << "\"Furry Friends\" is $" << price1 << "!\n";cout << "\"Fiery Fiends\" is $" << price2 << "!\n";// std::cin.get();return 0; 
}

打印末尾的0和小数点

        格式控制符:showpoint,用于显示末尾的0和小数点,永久有效

#include <iostream>int main()
{using std::cout;// using std::ios_base;float price1 = 20.40;float price2 = 1.9 + 8.0 / 9.0;// cout.setf(ios_base::showpoint);不建议使用setfcout << showpoint;cout << "\"Furry Friends\" is $" << price1 << "!\n";cout << "\"Fiery Fiends\" is $" << price2 << "!\n";cout.precision(2);cout << "\"Furry Friends\" is $" << price1 << "!\n";cout << "\"Fiery Fiends\" is $" << price2 << "!\n";// std::cin.get();return 0; 
}

其他格式控制符

        right--->设置为右对齐,永久生效

        c++默认就是右对齐

#include <iostream>
using namespace std;
int main()
{using std::cout;int a = 1234567;int b = 1;int c = 2;cout.width(7);cout << right;cout << b << endl;cout.width(7);cout << c << endl;cout.width(7);cout << a << endl;return 0; 
}

        left--->设置为左对齐,永久生效

#include <iostream>
using namespace std;
int main()
{using std::cout;cout.fill('#');int a = 1234567;int b = 1;int c = 2;cout.width(7);cout << left;cout << b << endl;cout.width(7);cout << c << endl;cout.width(7);cout << a << endl;return 0; 
}

        fixed--->固定以小数显示浮点数,永久生效

#include <iostream>
using namespace std;
int main()
{using std::cout;cout << fixed;double a = 0.000012;double b = 12345678.9;cout << a << endl;cout << b << endl;return 0; 
}

        scientific--->固定以科学计数法显示浮点数,永久生效

#include <iostream>
using namespace std;
int main()
{using std::cout;double a = 0.12;double b = 12.9;cout << a << endl;cout << b << endl;cout << scientific;cout << a << endl;cout << b << endl;return 0; 
}

        其它格式控制符不再赘述。

        大家很明显感受到,用格式控制符来进行格式化输出,更舒服一点。在前面的介绍中,cout.width()、cout.precision()、cout.fill()都是使用cout对象的成员函数来进行格式化输出。在<iomanip>中为它们三个分别设置了相应的控制符。

<iomanip>

  • setprecision()用于控制浮点数显示精度,永久有效
  • setfill()用于控制填充字符,永久有效
  • setw()用于控制字符宽度,只生效一次
#include <iostream>
#include <iomanip>
#include <cmath>int main()
{using namespace std;// use new standard manipulatorscout << fixed << right;// use iomanip manipulatorscout << setw(6) << "N" << setw(14) << "square root"<< setw(15) << "fourth root\n";double root;for (int n = 10; n <=100; n += 10){root = sqrt(double(n));cout << setw(6) << setfill('.') << n << setfill(' ')<< setw(12) << setprecision(3) << root<< setw(14) << setprecision(4) << sqrt(root)<< endl;}// std::cin.get();return 0; 
}

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

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

相关文章

探索铸铁试验平台在制造行业的卓越价值

铸铁试验平台在制造行业中具有重要的价值和作用。以下是铸铁试验平台在制造行业中的卓越价值&#xff1a; 提高产品质量&#xff1a;铸铁试验平台可以模拟各种生产条件和环境&#xff0c;并对铸铁产品进行精确的测试和评估。通过实验平台的测试&#xff0c;可以发现产品在不同条…

gpt3大模型蒸馏后效果会变差么

模型蒸馏&#xff08;Model Distillation&#xff09;是将复杂的 “教师模型”&#xff08;如 GPT-3&#xff09;的知识迁移到更轻量级的 “学生模型” 上的技术。蒸馏后的模型效果是否会变差&#xff0c;取决于多种因素&#xff0c;不能一概而论。以下是详细分析&#xff1a; …

SQL进阶之旅 Day 30:SQL性能调优实战案例

【SQL进阶之旅 Day 30】SQL性能调优实战案例 文章简述&#xff1a; 在数据库系统中&#xff0c;SQL查询的性能直接影响到整个应用的响应速度和用户体验。本文作为“SQL进阶之旅”系列的第30天&#xff0c;聚焦于SQL性能调优实战案例&#xff0c;通过多个真实业务场景中的SQL优…

【61 Pandas+Pyecharts | 基于Apriori算法及帕累托算法的超市销售数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 数据信息2.3 数据去重2.4 订单日期处理提取年份2.5 产品名称处理 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 每年销售额和利润分布3.2…

每日算法刷题Day31 6.14:leetcode二分答案2道题,结束二分答案,开始枚举技巧,用时1h10min

7. 1439.有序矩阵中的第K个最小数组和(困难,学习转化为373) 1439. 有序矩阵中的第 k 个最小数组和 - 力扣&#xff08;LeetCode&#xff09; 思想 1.给你一个 m * n 的矩阵 mat&#xff0c;以及一个整数 k &#xff0c;矩阵中的每一行都以非递减的顺序排列。 你可以从每一行…

springMVC-13 文件下载及上传

文件下载-ResponseEntity<T> 说明 在SpringMVC中&#xff0c;通过返回ResponseEntity<T>的类型&#xff0c;可以实现文件下载的功能 核心代码&#xff1a;就是设置HttpHeader 文件下载响应头的设置 content-type 指示响应内容的格式 content…

数据库学习笔记(十六)--控住流程与游标

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇和上一篇差不多&#xff0c;当做扩展&#xff0c;用到的时候再查即可(毕竟数据…

《Origin画百图》之核密度图

核密度图&#xff08;Kernel Density Plot&#xff09; 是一种用于展示数据分布形态的可视化工具&#xff0c;它通过平滑的曲线来估计数据的概率密度函数&#xff0c;相比直方图能更细腻地呈现数据的分布特征。 具体步骤&#xff1a; &#xff08;1&#xff09;选中数据&#…

使用Apache POI操作Word文档:从入门到实战

Apache POI是Java生态中最流行的Microsoft Office文档操作库之一&#xff0c;它为Word文档&#xff08;包括传统的.doc格式和现代的.docx格式&#xff09;提供了全面的API支持。本文将详细介绍如何使用Apache POI创建、读取和修改Word文档。 一、Apache POI简介与环境准备 1.…

CentOS 7.3环境中部署Kerberos集群

CentOS 7.3环境中部署Kerberos集群 文章目录 CentOS 7.3环境中部署Kerberos集群环境安装服务包 Kerberos MS 规划安装 KDC Master Server配置文件/etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf/var/kerberos/krb5kdc/kadm5.acl 创建Kerberos数据库启动与停止服务创建管理员创建…

1 Studying《Arm A715 Software Optimization Guide》

目录 1 Introduction 1.1 Product revision status 1.2 Intended audience 1.3 Scope 1.4 Conventions 1.5 Useful resources 2 Overview 2.1 Pipeline overview 3 Instruction characteristics 3.1 Instruction tables 3.2 Legend for reading the utilized pipeli…

第二十四章 24.QoS(CCNA)

第二十四章 24.QoS(CCNA) 介绍了switch QoS的配置方法 注释&#xff1a; 学习资源是B站的CCNA by Sean_Ning CCNA 最新CCNA 200-301 视频教程(含免费实验环境&#xff09; PS&#xff1a;喜欢的可以去买下他的课程&#xff0c;不贵&#xff0c;讲的很细 To be continued……

什么是稳定币?

稳定币&#xff08;Stablecoin&#xff09;是一种特殊的加密货币&#xff0c;其核心目标是维持价格稳定&#xff0c;通常与某种稳定资产&#xff08;如美元、黄金等&#xff09;挂钩。 一、为什么需要稳定币&#xff1f; 普通加密货币&#xff08;如比特币、以太坊&#xff09…

伺服学习(IS620N)

DI 端子的基本概念 DI 端子是伺服驱动器上的数字输入接口&#xff0c;用于接收外部开关、按钮或PLC的24V/0V信号。每个端子的功能可通过参数灵活配置&#xff08;如启停、限位等&#xff09;。 核心要点 功能设置&#xff1a;通过驱动器参数组&#xff08;如H03&#xff09;…

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…

Excel处理控件Aspose.Cells教程:使用 C# 在 Excel 中应用数据验证

Excel 中的数据验证可确保用户在工作表中仅输入有效数据。在设计表单、收集数据或构建财务模型时&#xff0c;数据验证有助于维护结构并最大限度地减少用户错误。在本文中&#xff0c;我们将向您展示如何使用 C# 以编程方式在 Excel 中应用数据验证。 Aspose.Cells 最新版下载…

AI应用:计算机视觉相关技术总结

计算机视觉概述 计算机视觉&#xff08;Computer Vision, CV&#xff09;是一门让计算机从图像或视频中 “理解” 和 “解释” 视觉信息的技术&#xff0c;涉及多学科交叉&#xff08;如数学、统计学、机器学习、信号处理等&#xff09;。以下从技术体系、核心任务、关键技术、…

人口贩卖暑期威胁消解:算法协同提升安全预警

随着暑期的到来&#xff0c;人员流动加剧&#xff0c;人口贩卖等恶性犯罪活动进入高发阶段&#xff0c;景区、车站、商场等公共场所成为潜在风险区域。传统安防手段在应对此类隐蔽性强、危害性大的犯罪时显得力不从心。为此&#xff0c;引入基于视觉分析的多维度算法技术&#…

【DSP笔记 · 第3章】数字世界的“棱镜”:离散傅里叶变换(DFT)完全解析

数字世界的“棱镜”&#xff1a;离散傅里叶变换&#xff08;DFT&#xff09;完全解析 在上一章&#xff0c;我们探索了Z变换和离散时间傅里叶变换&#xff08;DTFT&#xff09;。我们知道&#xff0c;DTFT是一个无比强大的理论工具&#xff0c;它能将一个时域离散序列的“基因…

卷积神经网络的参数量及尺度变化计算

文章目录 前言1.卷积2.参数量的计算2.1案例一2.2案例二 3.奇怪的优化思想3.1使用小核卷积替换大核卷积3.2卷积核11的应用 4.输出图像尺寸的计算4.1Same convolution4.2具体计算规则4.3转置卷积 小结 前言 本篇博客主要介绍卷积基本概念&#xff0c;卷积神经网络的参数量计算、…