C++重新入门-基本输入输出
C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作
I/O 库头文件
C++ 中用于输入输出(I/O)的库头文件主要包括 <iostream>
、<fstream>
和 <iomanip>
等。以下是这些头文件的简要介绍:
-
<iostream>
:- 提供了用于控制台输入输出的基本功能,如
std::cout
、std::cin
。 - 包含了标准流对象
std::cin
(标准输入)、std::cout
(标准输出)、std::cerr
(标准错误输出)和std::clog
(标准日志输出)。 - 还包含了一些基本的输入输出操作符,如
<<
和>>
。
- 提供了用于控制台输入输出的基本功能,如
-
<fstream>
:- 提供了文件输入输出的功能。
- 包含了用于文件读写的类,如
std::ifstream
(用于文件输入)、std::ofstream
(用于文件输出)和std::fstream
(用于文件读写)。 - 通过这些类,可以打开文件、读取文件内容、写入文件内容等操作。
-
<iomanip>
:- 提供了用于格式化输出的功能。
- 包含了
std::setw
、std::setprecision
、std::setfill
等函数,可以用来设置输出的字段宽度、精度、填充字符等格式。 - 通常用于美化输出结果,使其更易读。
这些头文件提供了 C++ 中常用的输入输出功能,可以满足大多数程序的基本需求。需要注意的是,在使用这些头文件时,需要包含相应的标准命名空间 std
,或者使用 using namespace std;
语句将其引入当前命名空间,以便直接使用标准库中的对象和函数。
标准输出流(cout)
标准输出流 cout
是 C++ 中用于向标准输出设备(通常是控制台)输出数据的流对象。它是 <iostream>
头文件中的一个类对象,位于 std
命名空间下。
使用 cout
可以将数据输出到控制台,这在程序调试、交互和展示信息时非常有用。下面是一些使用 cout
的基本示例:
#include <iostream>int main() {// 输出字符串std::cout << "Hello, world!" << std::endl;// 输出整数int num = 10;std::cout << "The value of num is: " << num << std::endl;// 输出浮点数double pi = 3.14159;std::cout << "The value of pi is: " << pi << std::endl;// 输出多个值int a = 5, b = 7;std::cout << "a = " << a << ", b = " << b << std::endl;return 0;
}
上述示例中,cout
使用了插入运算符 <<
来将数据插入输出流中。<<
运算符的左侧是 cout
对象,右侧是要输出的数据。可以连续使用多个 <<
运算符来输出多个值。
需要注意的是,在每次输出结束后,建议使用 std::endl
来输出一个换行符,以确保输出及时刷新到输出设备。此外,endl
还会刷新输出缓冲区,确保数据立即显示在屏幕上。
另外,为了减少代码中的冗长,可以使用 using namespace std;
将 std
命名空间引入当前命名空间,这样就可以直接使用 cout
而不必在其前面加上 std::
前缀。
#include <iostream>
using namespace std;int main() {cout << "Hello, world!" << endl;return 0;
}
cout
在 C++ 程序中是非常常用的,它提供了一种方便的方式来输出各种类型的数据,对于调试和交互来说尤其有用。
标准输入流(cin)
标准输入流 cin
是 C++ 中用于从标准输入设备(通常是键盘)接收输入数据的流对象。它也是 <iostream>
头文件中的一个类对象,位于 std
命名空间下。
使用 cin
可以从控制台获取用户的输入,并将其存储到相应的变量中。下面是一个简单的示例:
#include <iostream>int main() {int num;std::cout << "Please enter an integer: ";std::cin >> num;std::cout << "You entered: " << num << std::endl;return 0;
}
在这个示例中,cin
使用了提取运算符 >>
来从输入流中提取数据,并将其存储到变量 num
中。用户输入的值会被赋给 num
,然后通过 cout
输出到控制台。
需要注意的是,cin
会等待用户输入,并且输入的数据必须与变量的类型匹配,否则可能导致意外结果或错误。例如,如果用户输入的内容无法转换为整数,则会导致 cin
失败,而程序可能会进入错误状态。
为了防止程序陷入死循环等问题,可以在读取输入之前使用 cin
的成员函数 cin.clear()
来清除输入流的错误状态,以及 cin.ignore()
来清除输入缓冲区中的残留数据。
另外,可以通过使用 std::getline()
函数来读取一行完整的字符串,而不仅仅是一个单词或一个数字。
#include <iostream>
#include <string>int main() {std::string name;std::cout << "Please enter your name: ";std::getline(std::cin, name);std::cout << "Hello, " << name << "!" << std::endl;return 0;
}
cin
提供了一种方便的方式来获取用户的输入,使得程序可以与用户进行交互,接收用户输入的数据,并据此执行相应的操作。
标准错误流(cerr)
标准错误流 cerr
是 C++ 中用于向标准错误设备(通常是控制台)输出错误信息的流对象。它也是 <iostream>
头文件中的一个类对象,位于 std
命名空间下。
与 cout
类似,cerr
也是一个输出流,但它通常用于输出程序的错误消息、异常信息等。与 cout
不同的是,cerr
不会被缓冲,即使在输出之后,错误消息也会立即显示在控制台上。这有助于在程序发生错误时及时地将错误信息显示给用户,而不必等待缓冲区被刷新。
下面是一个简单的示例,演示如何使用 cerr
输出错误消息:
#include <iostream>int main() {int dividend = 10;int divisor = 0;if (divisor == 0) {std::cerr << "Error: Cannot divide by zero!" << std::endl;return 1; // 返回非零值表示程序发生错误}double result = dividend / divisor;std::cout << "Result: " << result << std::endl;return 0;
}
在这个示例中,如果除数 divisor
的值为零,那么程序会输出错误消息到标准错误流 cerr
,然后返回一个非零值,表示程序发生了错误。否则,程序会正常执行除法操作并输出结果到标准输出流 cout
。
使用 cerr
可以帮助开发者及时发现和定位程序中的错误,提高程序的可靠性和稳定性。通常,cerr
用于输出关键的错误信息,而 cout
用于输出一般性的信息和结果。
标准日志流(clog)
标准日志流 clog
与 cerr
和 cout
类似,是 C++ 中的一个输出流对象,用于输出程序的日志信息。它也是 <iostream>
头文件中的一个类对象,位于 std
命名空间下。
clog
通常用于输出程序的一般性日志信息,不像 cerr
那样用于输出关键的错误信息。与 cout
相比,clog
具有与 cerr
相似的特性,但与 cerr
不同的是,clog
使用了缓冲区,因此输出的日志信息会在缓冲区满或遇到换行符时才会刷新到目标设备(通常是控制台)。
下面是一个简单的示例,演示如何使用 clog
输出日志信息:
#include <iostream>int main() {int x = 10;// 输出日志信息std::clog << "Starting program..." << std::endl;std::clog << "The value of x is: " << x << std::endl;// 模拟日志记录for (int i = 0; i < 5; ++i) {std::clog << "Processing iteration " << i << "..." << std::endl;}std::clog << "Program completed." << std::endl;return 0;
}
在这个示例中,clog
被用于输出程序的运行日志信息,例如程序的启动、变量的值、循环迭代等。与 cout
类似,clog
使用插入运算符 <<
将数据插入输出流中,并且可以与 endl
一起使用来刷新输出缓冲区并输出换行符。
总的来说,clog
是用于输出程序的一般性日志信息的输出流对象,与 cerr
和 cout
一样,它提供了一种方便的方式来记录程序的运行状态和输出调试信息。
总的来说,C++ 中的标准输出流有三种:
cout
、cerr
和clog
,它们分别有着不同的特点和用途:
cout:
- 用于一般性的输出,如程序的运行结果、用户提示信息等。
- 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
- 适合用于一般性的输出场景,不需要立即显示的情况下使用。
cerr:
- 用于输出关键的错误信息、异常信息等。
- 不使用缓冲区,输出数据会立即显示在目标设备上,即使在其他输出之后。
- 通常用于输出程序的错误消息,或者需要立即显示的情况下使用。
clog:
- 用于输出程序的一般性日志信息。
- 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
- 通常用于输出程序的运行状态、调试信息等。
总的来说,根据输出的内容和要求,可以选择合适的输出流对象进行输出。对于关键的错误信息和异常信息,应该使用
cerr
;对于一般性的输出和日志信息,可以使用cout
或clog
。
相关文章:
C++重新入门-基本输入输出
C 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这…...

【C语言】解析刘谦春晚魔术《守岁共此时》
今年的春晚上刘谦表演了魔术《守岁共此时》,台上台下积极互动(尤其是小尼),十分的有趣。刘谦老师的魔术不仅仅是他的高超手法,还有这背后的严谨逻辑,下面我们来用C语言来解析魔术吧。 源代码 #define _CRT…...

剑指offer——数值的整数次方
目录 1. 题目描述2. 一般思路2.1 有问题的思路2.2 全面但不高效的思路2.3 面试小提示 3. 全面又高效的思路 1. 题目描述 题目:实现函数 double Power(double base,int exponent),求base 的exponent 次方。不得使用库函数,同时不需要考虑大数问题 2. 一般…...

Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN
摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络(CNN)的主要构建块。我们观察到,随着通道数的增加,优化后的CNN通常具有高度相关的滤波器,这降低了特征表示的表达力。我们提出了Tied Block Convolutio…...

算法沉淀——BFS 解决 FloodFill 算法(leetcode真题剖析)
算法沉淀——BFS 解决 FloodFill 算法 01.图像渲染02.岛屿数量03.岛屿的最大面积04.被围绕的区域 BFS(广度优先搜索)解决 Flood Fill 算法的基本思想是通过从起始点开始,逐层向外扩展,访问所有与起始点相连且具有相同特性…...

wordpress外贸成品网站模板
首页大图slider轮播,橙色风格的wordpress外贸网站模板 https://www.zhanyes.com/waimao/6250.html 蓝色经典风格的wordpress外贸建站模板 https://www.zhanyes.com/waimao/6263.html...

如何使用六图一表七种武器
六图一表七种武器用于质量管理: 描述当遇到问题时应该用那张图来解决: 一、如果题目说出了质量问题需要找原因? 解:用因果图,因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控? 解:…...

阿里云游戏服务器租用费用价格组成,费用详单
阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…...

【C++】C++11上
C11上 1.C11简介2.统一的列表初始化2.1 {} 初始化2.2 initializer_list 3.变量类型推导3.1auto3.2decltype3.3nullptr 4.范围for循环5.final与override6.智能指针7. STL中一些变化8.右值引用和移动语义8.1左值引用和右值引用8.2左值引用与右值引用比较8.3右值引用使用场景和意义…...

【前端高频面试题--git篇】
🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 前端高频面试题--git篇 往期精彩内容常用命令git add 和 git stage 有什么区别怎么使用git连接…...
c++创建对象
c创建对象 1.声明一个对象,然后使用默认构造函数来创建对象: class MyClass { public:MyClass() {// 构造函数代码} };int main() {MyClass obj; // 声明并创建一个对象return 0; }2.使用new和指针动态创建对象:不会自动释放 使用 new 运算…...

软件实例分享,洗车店系统管理软件会员卡电子系统教程
软件实例分享,洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…...

【Docker进阶】镜像制作-用Dockerfile制作镜像(一)
进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作用dockerfile制作镜像dockerfile是什么dockerfile格式为什么需要dockerfileDockerfile指令集合FROMMAINTAINERLABELCOPYENVWORKDIR 用dockerfile制作镜像 用快照制作镜像的缺陷: 黑盒不可重复臃肿 docker…...

数据密集型应用系统设计
数据密集型应用系统设计 原文完整版PDF:https://pan.quark.cn/s/d5a34151fee9 这本书的作者是少有的从工业界干到学术界的牛人,知识面广得惊人,也善于举一反三,知识之间互相关联,比如有个地方把读路径比作programming …...

分布式文件系统 SpringBoot+FastDFS+Vue.js【一】
分布式文件系统 SpringBootFastDFSVue.js【一】 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使…...

【PyQt】11-QTextEdit、QPushButton
文章目录 前言一、文本输入-QTextEdit1.1 代码1.2 运行结果 二、QPushButton2.1.1 按钮上添加文本2.1.2 按键的弹跳效果2.1.3 两个信号可以绑定一个槽。2.1.4 带图标的按键运行结果 2.1.5 按键不可用以及回车默认完整代码2.2 单选按键控件运行结果 2.3 复选框(多选框…...

初识webpack(二)解析resolve、插件plugins、dev-server
目录 (一)webpack的解析(resolve) 1.resovle.alias 2.resolve.extensions 3.resolve.mainFiles (二) plugin插件 1.CleanWebpackPlugin 2.HtmlWebpackPlugin 3.DefinePlugin (三)webpack-dev-server 1.开启本地服务器 2.HMR模块热替换 3.devServer的更多配置项 (…...

什么是自编码器Auto-Encoder?
来源:https://www.bilibili.com/video/BV1Vx411j78H/?spm_id_from333.1007.0.0&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 为什么要压缩呢? 让神经网络直接从上千万个神经元中学习是一件很吃力的事情,因此通过压缩提取出原图片中最具代…...

openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络
文章目录 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络219.1 查看网络状况 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络 获取openGauss节点的CPU、内存、I/O和网络资源使用情况,确认这些资源…...

SAP PP学习笔记- 豆知识01 - 怎么查询既存品目
SAP系统当中已经有哪些品目要怎么查询呢? 1,MM60 品目一览 这里可以输入Plant,然后可以查询该工厂的所有品目。 2,SE16 > MARA MARA 品目一般Data,存放的是品目基本信息。 如果要查询该品目属于哪个Plant&#x…...
Go深入学习延迟语句
1 延迟语句是什么 编程的时候,经常会需要申请一些资源,比如数据库连接、文件、锁等,这些资源需要再使用后释放掉,否则会造成内存泄露。但是编程人员经常容易忘记释放这些资源,从而造成一些事故。 Go 语言直接在语言层…...
【C/C++】EBO空基类优化介绍
空对象优化(Empty Base Optimization,简称 EBO)是 C 编译器的一种 优化技术,用于消除空类作为基类时占用的内存空间,从而避免浪费空间、提升结构体或类的存储效率。 1 什么是“空对象”? 一个**空类&#…...
C++ map基础概念、map对象创建、map赋值操作、map大小操作、map数据插入、map数据删除、map数据修改、map数据统计
map的使用频率很高,仅次于vector,先了解下pair的概念: pair 概念: template<class _Ty1, class Ty2> struct pair{ _Ty1 first; // 这两个可以是任意的类型 _Ty2 second; }; eg:pair<int, int> p(13,…...

力扣HOT100之二分查找:4. 寻找两个正序数组的中位数
这道题如果没有时间复杂度的限制的话,相当好做,但是这道题要求时间复杂度为O(log(m n)),思路很难想,我看了一圈题解,发现华南溜达虎的视频讲得还不错,我是参考他的思路写出来的,这里把他的思路…...
什么是 Ansible 主机和组变量
Ansible 是一款强大的自动化工具,可简化配置管理、应用程序部署和预配等 IT 任务。其最有价值的功能之一是能够定义变量,从而为不同的主机和组定制剧本。本文将解释 Ansible 中组变量和主机变量的概念,并通过实际示例说明它们的用法。 Ansib…...

NLP学习路线图(二十九):BERT及其变体
在自然语言处理(NLP)领域,一场静默的革命始于2017年。当谷歌研究者发表《Attention is All You Need》时,很少有人预料到其中提出的Transformer架构会彻底颠覆NLP的发展轨迹,更催生了以GPT系列为代表的语言模型风暴,重新定义了人类与机器的交互方式。 一、传统NLP的瓶颈:…...
基于深度学习(Unet和SwinUnet)的医学图像分割系统设计与实现:超声心脏分割
基于深度学习的医学图像分割系统设计与实现 摘要 本文提出了一种基于深度学习的医学图像分割系统,该系统采用U-Net和Swin-Unet作为核心网络架构,实现了高效的医学图像分割功能。系统包含完整的训练、验证和推理流程,并提供了用户友好的图形界面。实验结果表明,该系统在医…...

Go语言堆内存管理
Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同,只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了,含义是相同的,只是名字有…...
C#合并CAN ASC文件:实现与优化
C#合并CAN ASC文件:实现与优化 在汽车电子和工业控制领域,CAN(Controller Area Network)总线是一种广泛使用的通信协议。CAN ASC(American Standard Code)文件则是记录CAN总线通信数据的标准格式ÿ…...

如何使用Jmeter进行压力测试?
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬…...