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…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
