Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++输出格式化:从流输出到控制台

C++输出格式化:从流输出到控制台

作者头像
很酷的站长
发布于 2023-08-25 04:50:27
发布于 2023-08-25 04:50:27
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

一、格式化输出的作用

在C++中,格式化输出是指以一定的格式向控制台输出信息。相比于普通输出,格式化输出能够使输出信息更加直观和易读。比如可以将输出的数字、字符串、日期等按照一定格式进行排版,以便用户更好地理解信息。

大多数情况下,格式化输出是用于向用户展示计算的结果。例如,在计算器应用中,结果需要用规范的形式呈现给用户。在游戏开发中,我们需要向玩家提供游戏状态的输出,以便他们更好地理解和玩游戏。在数据分析领域,我们需要将处理后的数据以可读性更高的方式输出,以便数据分析师进一步分析其中的规律。

C++语言提供了强大的输出库,可以以多种方式对输出进行格式化。主要包括流输出、printf()和format()等方式。本篇文章主要介绍C++流输出的方式。

二、C++流输出的基本语法

C++中流输出的语法比较简单。流输出运算符“<<”用于将需要输出的元素拼接到一起。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int main() {
  int a = 10;
  cout << "hello" << "world" << a << endl;
  return 0;
}

以上代码会将“hello”,“world”和变量a的值拼接成一个字符串然后输出,输出结果为:“helloworld10”。通过“<<”运算符将多个元素拼接为一个字符串,不同类型的元素可以并列使用,编译器会自动将它们转换为字符串。

流输出默认以空格符为分隔符,默认以换行符结尾。通过符号“endl”可以手动输入回车符。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int main() {
  cout << "hello" << endl;
  cout << "world" << endl;
  return 0;
}

以上代码会将“hello”与“world”分别输出并在每个字符串结尾输入换行符。

三、C++流输出的格式化

在实际使用中,通常需要进行更加复杂的格式化操作,包括输出宽度、刷空格、输出小数、设置精度等。C++流输出提供了丰富的选项,可以实现各种复杂的输出需求。

3.1 输出宽度和填充字符

在输出一个字符串或数字时,我们往往需要控制输出场宽和填充字符。C++流输出提供了 setw() 函数来设置输出的宽度,fill() 函数来设置填充字符。例如,如果我们想要输出一个数字,并让它至少占 6 个字符宽度,可以采用如下方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<iomanip> // 必须 include <iomanip> 头文件才能使用 setw() 函数
using namespace std;

int main() {
    int num = 10;
    cout << "|" << setw(6) << num << "|" << endl;
    return 0;
}

输出结果:

| 10| 其中setw(6)指定了num所在输出项的宽度为6个字符,左边不足的补充空格。

类似地,如果我们希望输出将左对齐的字符串,可以如下设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<iomanip> // 必须 include <iomanip> 头文件才能使用 setw() 函数
using namespace std;

int main() {
    string s = "hello";
    cout << "|" << setw(10) << left << s << "|" << endl;
    return 0;
}

输出结果: |hello | 其中left指定将字符串左对齐输出,剩余字符用空格填充。

3.2 输出小数

在C++中,输出小数需要使用到 float、double 和 long double 等类型。小数的输出可以通过控制符“fixed”和“scientific”进行控制。

例如,如果我们想要以科学计数法形式输出一个十进制小数,可以使用如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<iomanip> // 必须 include <iomanip> 头文件才能使用 setprecision() 函数
using namespace std;

int main() {
    double num = 1000.0 / 3.0;
    cout << scientific << setprecision(10) << num << endl;
    return 0;
}

输出结果: 3.3333333333e+002

在上面的代码中,setprecision() 函数设置输出精度到小数点后面的位数,scientific用于控制输出结果是科学计数法。

3.3 输出控制符

C++流输出支持不同的控制符,用于控制输出格式,如oct、dec、hex、left、right、flush等等。

下面是一些常用的控制符:

  • boolalpha:true输出为“true”,false输出为“false”
  • uppercase:输出字母时强制大写
  • showbase:在输出时显示基数
  • oct:以八进制输出
  • dec:以十进制输出
  • hex:以十六进制输出
  • left:左对齐输出
  • right:右对齐输出
  • setw():设置输出场宽
  • setprecision():设置输出精度
  • flush:刷新缓存区

3.4 流输出和文件输出

在C++中,我们可以将输出重定向到文件中,这意味着我们可以将格式化后的输出保存到文件中,而不是输出到控制台。C++提供了两种方式将输出重定向到文件中,分别为流输出和文件输出。

对于流输出,我们可以将输出重定向到字符串缓存中,然后将其保存至文件中。流输出到字符串缓存的核心是stringstream库。

例如,我们可以通过如下代码将输出重定向到字符串中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;

int main(){
    //将 cout 重定向到 buffer
    stringstream buffer;
    cout.rdbuf(buffer.rdbuf());
    //执行输出操作
    cout<<"hello, world!"<

在上面的代码中,我们使用 cout.rdbuf() 将输出流重定向到字符串缓存中,执行后打印出“hello, world!”。接着,在代码中使用了 buffer.str() 方法从字符串缓存中读出输出,并将其保存到文件中。

类似地,C++中还可以通过文件输出流重定向输出到文件中。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iostream>
#include<fstream>
using namespace std;

int main(){
    //将 cout 输出重定向到文件
    ofstream outfile("output.txt");
    streambuf* old_cout_buf = cout.rdbuf(); //保存 cout 原有的 buf 指针
    cout.rdbuf(outfile.rdbuf()); //将 cout 的 buf 指向 outfile 的 buf 指针
    //执行输出操作
    cout<<"hello, file!"<

以上程序会向当前目录下的 output.txt 文件写入一行文本“hello, file!”。

四、总结

本文主要介绍了C++流输出的基本语法、格式化等操作。有了这些基本操作的掌握,我们可以更好地控制输出信息的形式和布局,为用户提供更好的使用体验。

总之,格式化输出不仅可以使程序具有更好的可读性和易用性,还可以为用户提供更直观和良好的用户体验。C++流输出是实现格式化输出的重要手段之一,掌握其基本语法和格式化操作,能够使我们的程序能够更好地满足用户需求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++】输入输出流 ⑧ ( cout 输出格式控制 | 设置进制格式 - dex、hex、oct | 指定输出宽度 / 填充 - setw / setfill | 指定浮点数格式 )
在使用 cout 标准输出流 输出数据时 , 默认不指定 输出格式 , 系统会根据输出的类型 输出 默认的字符格式 ,
韩曙亮
2023/12/12
4430
【C++】输入输出流 ⑧ ( cout 输出格式控制 | 设置进制格式 - dex、hex、oct | 指定输出宽度 / 填充 - setw / setfill | 指定浮点数格式 )
C++从入门到精通——C++输入和输出
C++中的输入和输出主要通过标准库中的iostream类实现。使用cin对象从标准输入(如键盘)读取数据,使用cout对象将数据写入标准输出(如屏幕)。
鲜于言悠
2024/03/30
1.4K0
C++从入门到精通——C++输入和输出
从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化,以ios类成员函数方式格式化)
该文介绍了如何利用C++类库进行面向对象的程序设计,包括定义类、类成员、构造函数、析构函数、拷贝构造函数、赋值运算符的重载、类的友元、友元类、成员函数、运算符重载、虚函数、虚函数机制的原理、虚函数的实现、虚函数与继承的关系、虚函数与多态的关系、纯虚函数、抽象类、接口、函数模板、类模板、模板特化、偏特化、逆转型,以及指针、多态、虚函数、继承、类和对象、构造和析构、友元、模板、异常等基本概念和编程技巧。
s1mba
2017/12/26
1.1K0
从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化,以ios类成员函数方式格式化)
C++的输入输出 I/O流控制
从中可以知道单用setprecision(n)控制的是总数字数,默认是6位,如果要控制小数位,要与fixed合用。
叶茂林
2023/07/28
2600
cout格式化输出
ostream类是从ios类派生而来,ios类是从ios_base类派生而来。ios_base类存储了描述格式状态的信息,例如一个类成员中某些位决定使用哪个计数系统(如八/十/十六进制),另外一个成员决定字段的宽度,且ios_base是ostream间接基类,因此ostream也可以修改计数系统和字段宽度。
艰默
2023/02/26
1.6K0
cout格式化输出
C++知识整理(在此感谢大牛的整理)
这篇文章主要讲解如何在C++中使用cin/cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cin/cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在<sstream>、<fstream>上使用这些格式化操作,从而代替sscanf/sprintf和fscanf/fprintf函数。为方便描述,下文仅以cin/cout为例进行介绍。   一、综述   cin/cout是ST
Gxjun
2018/03/21
1.3K0
C/C++开发基础——IO操作与文件流
C++的IO操作是基于字节流,并且IO操作与设备无关,同一种IO操作可以在不同类型的设备上使用。
Coder-ZZ
2023/11/13
3610
C/C++开发基础——IO操作与文件流
8.1 C++ 标准输入输出流
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王 瑞
2023/10/21
3510
8.1 C++ 标准输入输出流
详解C/C++输入输出
C/C++输入输出很多,在不同的情况会用不同的输入输出,有的题目在输入时可能换一种输入输出就能不会TLE,有的输入可能要循环输入,但是可以换一种输入直接就能把所有数据输入进去。C/C++有哪些常用的输入输出,在什么时候用它们,这篇博客我会一一详解。
摆烂小白敲代码
2024/09/23
5330
详解C/C++输入输出
C++之IO格式控制
C语言中,我们可以通过函数printf和scanf进行格式化控制,而在C++中仍然包含了前者,但还提供了以下两种格式控制的方法: (1)使用流成员函数进行格式控制; (2)使用预定义操作符进行格式控制。
恋喵大鲤鱼
2018/08/03
8820
C++之IO格式控制
C++003-C++变量和数据类型2
前两个数采用了科学记数法(scientific notation),第三个数保留了5位小数。浮点数用默认记数法defaultfloat编写:这种表示方法尽可能用多的位数,这个位数包括小数点前及小数点后的位数。 默认记数法特点
IT从业者张某某
2023/10/16
4150
C++003-C++变量和数据类型2
【C++ 程序设计入门基础】- Chapter One
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
跟着飞哥学编程
2022/11/16
1.1K0
【C++ 程序设计入门基础】- Chapter One
C++之cout
以往要输出不同进制的数值,需要先unsetf取消当前进制,setf设置当前进制,下面给出了代码例子:
用户7886150
2021/02/25
8690
2.9 C++控制符
读者学习C语言的过程中,应该遇到过这个问题,需要控制输出小数点位数,在C语言中是这样来控制的
小林C语言
2020/10/30
7360
C plus plus 控制格式
使用这些格式需要声明包含<iomainip> long flags( ) const 返回当前的格式标志。 long flays(long newflag) 设置格式标志为newflag,返回旧的格式标志。 long setf(long bits) 设置指定的格式标志位,返回旧的格式标志。 long setf(long bits,long field)将field指定的格式标志位置为bits,返回旧的格式标志 long unsetf(long bits) 清除bits指定的格式标志位,返回旧的格式标志。 l
Gxjun
2018/03/22
1.2K0
快速从C过度C++(一):namespace,C++的输入和输出,缺省参数,函数重载
📝前言: 本文章适合有一定C语言编程基础的读者浏览,主要介绍从C语言到C++过度,我们首先要掌握的一些基础知识,以便于我们快速进入C++的学习,为后面的学习打下基础。 这篇文章的主要内容有: 1,命名空间namespace 2,C++的输入和输出 3,缺省参数 4,函数重载
用户11029137
2025/03/07
2090
快速从C过度C++(一):namespace,C++的输入和输出,缺省参数,函数重载
【C++】std命名空间及输入输出流
上一篇的命名空间剩下的还有std(官方库的命名空间),用来串联这节的输入输出流;但是我还是要把他放在后面,“让子弹在飞一会”;
啊QQQQQ
2024/11/19
1490
C/C++ 字符串拷贝处理
strcat字符串连接: 将由src指向的空终止字节串的副本追加到由dest指向的以空字节终止的字节串的末尾
王 瑞
2022/12/28
6710
ScanfPrintf 和 CinCout 的对比:格式控制与性能差异分析
在C和C++编程中,输入输出是我们常用且基础的操作。C语言的标准输入输出函数 scanf 和 printf 与C++的输入输出流 cin 和 cout 都在程序中扮演着不可或缺的角色。虽然它们在某些方面有共同之处,但它们在格式控制、性能表现以及使用体验上却存在显著差异。在本文中,我们将详细对比 scanf/printf 和 cin/cout,特别是在格式控制和性能方面的差异,并深入分析如何灵活使用这两者满足不同需求。
平凡之路.
2025/02/07
1210
一、从C语言到C++(一)
综上所述,C++和C语言虽然都是编程语言,但C++在C语言的基础上增加了许多新的特性和功能,特别是在面向对象编程和泛型编程方面的支持,使得C++在编程时更加灵活和强大。同时,C++也继承了C语言的许多优点,如简洁、高效和可移植性等。
用户11332765
2024/10/28
2370
推荐阅读
相关推荐
【C++】输入输出流 ⑧ ( cout 输出格式控制 | 设置进制格式 - dex、hex、oct | 指定输出宽度 / 填充 - setw / setfill | 指定浮点数格式 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验