当前位置: 首页 > news >正文

C++重新入门-基本输入输出

C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作

I/O 库头文件

C++ 中用于输入输出(I/O)的库头文件主要包括 <iostream><fstream><iomanip> 等。以下是这些头文件的简要介绍:

  1. <iostream>

    • 提供了用于控制台输入输出的基本功能,如 std::coutstd::cin
    • 包含了标准流对象 std::cin(标准输入)、std::cout(标准输出)、std::cerr(标准错误输出)和 std::clog(标准日志输出)。
    • 还包含了一些基本的输入输出操作符,如 <<>>
  2. <fstream>

    • 提供了文件输入输出的功能。
    • 包含了用于文件读写的类,如 std::ifstream(用于文件输入)、std::ofstream(用于文件输出)和 std::fstream(用于文件读写)。
    • 通过这些类,可以打开文件、读取文件内容、写入文件内容等操作。
  3. <iomanip>

    • 提供了用于格式化输出的功能。
    • 包含了 std::setwstd::setprecisionstd::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)

标准日志流 clogcerrcout 类似,是 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 是用于输出程序的一般性日志信息的输出流对象,与 cerrcout 一样,它提供了一种方便的方式来记录程序的运行状态和输出调试信息。

总的来说,C++ 中的标准输出流有三种:coutcerrclog,它们分别有着不同的特点和用途:

  1. cout

    • 用于一般性的输出,如程序的运行结果、用户提示信息等。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 适合用于一般性的输出场景,不需要立即显示的情况下使用。
  2. cerr

    • 用于输出关键的错误信息、异常信息等。
    • 不使用缓冲区,输出数据会立即显示在目标设备上,即使在其他输出之后。
    • 通常用于输出程序的错误消息,或者需要立即显示的情况下使用。
  3. clog

    • 用于输出程序的一般性日志信息。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 通常用于输出程序的运行状态、调试信息等。

总的来说,根据输出的内容和要求,可以选择合适的输出流对象进行输出。对于关键的错误信息和异常信息,应该使用 cerr;对于一般性的输出和日志信息,可以使用 coutclog

 

相关文章:

C++重新入门-基本输入输出

C 的 I/O 发生在流中&#xff0c;流是字节序列。如果字节流是从设备&#xff08;如键盘、磁盘驱动器、网络连接等&#xff09;流向内存&#xff0c;这叫做输入操作。如果字节流是从内存流向设备&#xff08;如显示屏、打印机、磁盘驱动器、网络连接等&#xff09;&#xff0c;这…...

【C语言】解析刘谦春晚魔术《守岁共此时》

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

剑指offer——数值的整数次方

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

Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN

摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络&#xff08;CNN&#xff09;的主要构建块。我们观察到&#xff0c;随着通道数的增加&#xff0c;优化后的CNN通常具有高度相关的滤波器&#xff0c;这降低了特征表示的表达力。我们提出了Tied Block Convolutio…...

算法沉淀——BFS 解决 FloodFill 算法(leetcode真题剖析)

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

wordpress外贸成品网站模板

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

如何使用六图一表七种武器

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

阿里云游戏服务器租用费用价格组成,费用详单

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

【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篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 前端高频面试题--git篇 往期精彩内容常用命令git add 和 git stage 有什么区别怎么使用git连接…...

c++创建对象

c创建对象 1.声明一个对象&#xff0c;然后使用默认构造函数来创建对象&#xff1a; class MyClass { public:MyClass() {// 构造函数代码} };int main() {MyClass obj; // 声明并创建一个对象return 0; }2.使用new和指针动态创建对象&#xff1a;不会自动释放 使用 new 运算…...

软件实例分享,洗车店系统管理软件会员卡电子系统教程

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

【Docker进阶】镜像制作-用Dockerfile制作镜像(一)

进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作用dockerfile制作镜像dockerfile是什么dockerfile格式为什么需要dockerfileDockerfile指令集合FROMMAINTAINERLABELCOPYENVWORKDIR 用dockerfile制作镜像 用快照制作镜像的缺陷&#xff1a; 黑盒不可重复臃肿 docker…...

数据密集型应用系统设计

数据密集型应用系统设计 原文完整版PDF&#xff1a;https://pan.quark.cn/s/d5a34151fee9 这本书的作者是少有的从工业界干到学术界的牛人&#xff0c;知识面广得惊人&#xff0c;也善于举一反三&#xff0c;知识之间互相关联&#xff0c;比如有个地方把读路径比作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 复选框&#xff08;多选框…...

初识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?

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

openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络

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

SAP PP学习笔记- 豆知识01 - 怎么查询既存品目

SAP系统当中已经有哪些品目要怎么查询呢&#xff1f; 1&#xff0c;MM60 品目一览 这里可以输入Plant&#xff0c;然后可以查询该工厂的所有品目。 2&#xff0c;SE16 > MARA MARA 品目一般Data&#xff0c;存放的是品目基本信息。 如果要查询该品目属于哪个Plant&#x…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...