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

【C++】标准库IO查漏补缺

【C++】标准库 IO 查漏补缺

文章目录

    • 系统I/O
      • 1. 概述
      • 2. cout 与 cerr
      • 3. cerr 和 clog
      • 4. 缓冲区
      • 5. 与 printf 的比较

系统I/O

1. 概述

标准库提供的 IO 接口,包含在 iostream 文件中

  • 输入流: cin
  • 输出流:cout / cerr / clog。

输入流只有一个 cin,而输出流有三个 cout / cerr / clog,这些输出流有什么区别呢?

输出流的主要区别有两个

  1. 输出目标不同
  2. 是否刷新缓冲区

2. cout 与 cerr

首先 cout 和 cerr 的输出目标不同,若程序重定向到文件,则会分别输出在不同的文件里。

编写如下程序:

#include <iostream>
using namespace std;
int main()
{cout << "output to cout" << endl;cerr << "output to cerr" << endl;return 0;
}

执行

./testio > txt1 2> txt2

在这里插入图片描述

3. cerr 和 clog

cerr 和 clog 区别是否立即刷新缓冲区,两者都是同一个输出目标

#include <iostream>
using namespace std;
int main()
{cout << "output to cout" << endl;cerr << "output to cerr" << endl;clog << "output to clog" << endl;return 0;
}

再次执行

./testio > txt1 2> txt2

可以看到 cerr和clog在同一个文件中

4. 缓冲区

缓冲区是内存的一部分,输出的东西先存入缓冲区,缓冲区满了再输出,程序操作内存速度要快一些,从而达到比较高的执行效率。

cerr 会立即刷新缓冲区,从而在程序错误异常崩溃时,能够及时看到错误。

std::flush 或者 std::endl 用于在执行到此行语句时,立即刷新缓冲区。
因此过度的使用这两个会拖慢进程,所以仅在必要时使用 std::flush 或 std::endl 来立即刷新缓冲区。

关于 std 这是一个命名空间 standard ,C++ 标准库

5. 与 printf 的比较

printf 比较直观,一目了然,cout 有很多 << 而且拼字符串有可能拼错

int x = 10;
std::cout << "I have " << x << " apples\n";
printf("I have %d apples\n", x);

但 printf 容易出错,cout 不容易出错

float x = 10;
std::cout << "I have " << x << " apples";
printf("I have %d apples\n", x);

此处占位符出错便无法进行正确的输出,占位符必须匹配正确

C++20 格式化

auto s1 {format("read {} bytes from {}", 100, "file.txt")};

目前编译器都不是支持的特别好。

相关文章:

【C++】标准库IO查漏补缺

【C】标准库 IO 查漏补缺 文章目录 系统I/O1. 概述2. cout 与 cerr3. cerr 和 clog4. 缓冲区5. 与 printf 的比较 系统I/O 1. 概述 标准库提供的 IO 接口&#xff0c;包含在 iostream 文件中 输入流: cin输出流&#xff1a;cout / cerr / clog。 输入流只有一个 cin&#x…...

python简单易懂的lxml读取HTML节点及常用操作方法

python简单易懂的lxml读取HTML节点及常用操作方法 1. 初始化和基本概念 lxml 是一个强大的pyth库&#xff0c;用于处理XML和HTML文档。它提供了类似BeautifulSoup的功能&#xff0c;但性能更高。在使用lxml时&#xff0c;通常会先解析HTML或XML文档&#xff0c;得到一个Eleme…...

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…...

安卓获取apk的公钥,用于申请app备案等

要申请app的icp备案等场景&#xff0c;需要app的 证书MD5指纹和公钥&#xff0c;示例如下&#xff1a; 步骤1&#xff1a;使用keytool从APK中提取证书 1. 打开命令行&#xff0c;cd 到你的apk目录&#xff0c;如&#xff1a;app/release 2. 解压APK文件&#xff1a; unzip yo…...

【leetcode_python】杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 方案&#…...

Parallels Desktop 20 for Mac中文版发布了?会哪些新功能

Parallels Desktop 20 for Mac 正式发布&#xff0c;完全支持 macOS Sequoia 和 Windows 11 24H2&#xff0c;并且在企业版中引入了全新的管理门户。 据介绍&#xff0c;新版本针对 Windows、macOS 和 Linux 虚拟机进行了大量更新&#xff0c;最大的亮点是全新推出的 Parallels…...

SpringBoot整合SSE-灵活管控连接

SpringBoot整合SSE(管控连接) 1、sse单向通信整成逻辑双向通信。 2、轻量级实现端对端信息互通。 3、避免繁琐配置学习。 核心点通过记录连接码和心跳检测实现伪双向通道,避免无效连接占用过多内存。 服务器推送(Server Push)技术允许网站和应用在有新内容可用时主动向用户…...

挖矿木马-Linux

目录 介绍步骤 介绍 1、挖矿木马靶机中切换至root用户执行/root目录下的start.sh和attack.sh 2、题目服务器中包含两个应用场景&#xff0c;redis服务和hpMyAdmin服务&#xff0c;黑客分别通过两场景进行入侵&#xff0c;入侵与后续利用线路路如下&#xff1a; redis服务&…...

【leetcode——415场周赛】——python前两题

3289. 数字小镇中的捣蛋鬼 数字小镇 Digitville 中&#xff0c;存在一个数字列表 nums&#xff0c;其中包含从 0 到 n - 1 的整数。每个数字本应 只出现一次&#xff0c;然而&#xff0c;有 两个 顽皮的数字额外多出现了一次&#xff0c;使得列表变得比正常情况下更长。 为了…...

【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…...

ZYNQ LWIP(RAW API) TCP函数学习

1 LWIP TCP函数学习 tcp_new()–新建控制块 这个函数用于分配一个TCP控制块,它通过tcp_alloc()函数分配一个TCP控制块结构来存储TCP控制块的数据信息, 如果没有足够的内容分配空间,那么tcp_alloc()函数就会尝试释放一些不太重要的TCP控制块, 比如就会释放处于TIME_WAIT、C…...

Spring Boot,在应用程序启动后执行某些 SQL 语句

在 Spring Boot 中&#xff0c;如果你想在应用程序启动后执行某些 SQL 语句&#xff0c;可以利用 spring.sql.init 属性来配置初始化脚本。这通常用于在应用启动时创建数据库表、索引、视图等&#xff0c;或者填充默认数据。data-locations 和 schema-locations 指定了 SQL 脚本…...

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";...

04_Python数据类型_列表

Python的基础数据类型 数值类型&#xff1a;整数、浮点数、复数、布尔字符串容器类型&#xff1a;列表、元祖、字典、集合 列表 列表&#xff08;List&#xff09;是一种非常灵活的数据类型&#xff0c;它可以用来存储一系列的元素。容器类型&#xff0c;能够存储多个元素的…...

F5设备绑定EIP

公网IP 公网IP&#xff08;Public IP Address&#xff09;是指可以直接在互联网上访问的IP地址&#xff0c;用于标识网络上的设备或主机。它允许外部网络访问您的云服务器&#xff0c;如提供远程登录服务、访问Web服务器等。然而&#xff0c;这并不意味着公网IP不需要路由。 …...

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …...

从0开始学习 RocketMQ:分布式事务消息的实现

消息队列中的事务&#xff0c;主要是解决消息生产者和消息消费者数据一致性的问题。 应用场景 比如订单系统创建订单后&#xff0c;会发消息给购物车系统&#xff0c;将已下单的商品从购物车中删除。 由于购物车删除商品这一步骤并不是用户下单支付这个主流程中的核心步骤&a…...

MySQL 查询数据库的数据总量

需求&#xff1a;查看MySQL数据库的数据总量&#xff0c;以MB为单位展示数据库占用的磁盘空间 实践&#xff1a; 登录到MySQL数据库服务器。 选择你想要查看数据总量的数据库&#xff1a; USE shield;运行查询以获取数据库的总大小&#xff1a; SELECT table_schema AS Datab…...

[C++]——vector

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日小句&#xff1a;快乐的方式有很多种&#xff0c;第一种便是见到你。 目录 一、前言 二、vector的介绍及使用 2.1 vector的介绍 2.2 vector的使用 2.2.1 vector的定义&#xff08;构造函数&#xff09; 2.2.2…...

自动驾驶:LQR、ILQR和DDP原理、公式推导以及代码演示(七、CILQR约束条件下的ILQR求解)

&#xff08;七&#xff09;CILQR约束条件下的ILQR求解 CILQR&#xff08;(Constrained Iterative Linear Quadratic Regulator)&#xff09; 是为了在 iLQR 基础上扩展处理控制输入和状态约束的问题。在这种情况下&#xff0c;系统不仅要优化控制输入以最小化代价函数&#x…...

别再手动画甘特图了!用VS Code插件MarkWhen,写几行文本就能生成炫酷时间轴

用MarkWhen在VS Code中打造极简时间轴&#xff1a;告别繁琐拖拽&#xff0c;拥抱文本化项目管理 在数字时代&#xff0c;时间管理和项目规划已经成为每个高效能人士的必修课。无论是开发者跟踪项目里程碑&#xff0c;学生规划学习路径&#xff0c;还是个人记录生活轨迹&#xf…...

Cube Studio:革命性云原生AI平台,一站式解决机器学习全流程难题

Cube Studio&#xff1a;革命性云原生AI平台&#xff0c;一站式解决机器学习全流程难题 【免费下载链接】cube-studio cube studio开源云原生一站式机器学习/深度学习/大模型AI平台/MaaS/mlops/人工智能平台/训推平台&#xff0c;算法全链路流程&#xff0c;多租户&#xff0c;…...

基于Arduino与IRLib2的万能遥控器DIY:从红外解码到蓝牙HID的嵌入式实践

1. 项目概述与核心价值如果你和我一样&#xff0c;家里电视、机顶盒、音响、空调的遥控器堆满了茶几&#xff0c;每次想用都得翻找半天&#xff0c;或者你正在为一位行动不便的亲友寻找一种更便捷的控制家电的方式&#xff0c;那么这个基于Arduino和IRLib2的万能遥控器DIY项目&…...

网盘直链解析工具终极指南:如何3分钟实现9大网盘下载加速

网盘直链解析工具终极指南&#xff1a;如何3分钟实现9大网盘下载加速 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

FakeLocation:安卓应用级位置模拟终极解决方案

FakeLocation&#xff1a;安卓应用级位置模拟终极解决方案 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 在数字时代&#xff0c;位置隐私已成为每个Android用户必须面对的重要问…...

RAG落地方案

1. RAG分析1.1 为什么需要 Rerank&#xff1f;要理解 Rerank 的价值&#xff0c;得先理解向量检索到底"差"在哪。RAG 的第一阶段检索&#xff0c;通常用的是双塔&#xff08;Bi-Encoder&#xff09;架构的 Embedding 模型。它的工作方式是把 Query 和每个文档分别独立…...

YOLO26缝合A2-Nets注意力:双重注意力机制在复杂遮挡场景的奇效

本文系统解析A2-Nets双重注意力机制在YOLO目标检测框架中的应用潜力与实战价值。通过深入对比YOLOv10、YOLO26与YOLOv9的架构差异,结合A2-Nets二阶注意力池化与自适应特征分配的核心原理,揭示双重注意力机制在复杂遮挡场景下提升检测精度的根本原因。文章同步涵盖TensorRT部署…...

别再手动输数据了!手把手教你用Fluent的Profile功能导入实验数据(附CSV文件模板)

别再手动输数据了&#xff01;手把手教你用Fluent的Profile功能导入实验数据&#xff08;附CSV文件模板&#xff09; 在计算流体力学&#xff08;CFD&#xff09;分析中&#xff0c;准确导入实验数据或第三方软件的计算结果作为边界条件&#xff0c;往往是确保仿真可靠性的关键…...

别再只关445端口了!针对MS17-010(永恒之蓝)的深度防御与自动化检测脚本分享

超越端口关闭&#xff1a;MS17-010漏洞的立体防御体系构建指南 当企业安全团队在晨会上讨论"永恒之蓝"防御策略时&#xff0c;最常见的场景往往是&#xff1a;"我们已经关闭了445端口&#xff0c;应该安全了吧&#xff1f;"这种认知恰恰暴露了当前安全防护…...

NVIDIA Profile Inspector终极指南:解锁700+显卡隐藏设置,提升游戏性能30%

NVIDIA Profile Inspector终极指南&#xff1a;解锁700显卡隐藏设置&#xff0c;提升游戏性能30% 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款强大的开源显卡配置工具…...