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

news2024/9/27 5:45:59

【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")};

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MFC工控项目实例之十六输入信号验证

承接专栏《MFC工控项目实例之十五定时刷新PC6325A模拟量输入》 验证选定的输入信号实时状态 在BoardTest.cpp文件中添加代码 void CBoardTest::OnButton2() {// TODO: Add your control notification handler code hereisThreadBegin true; //运行线程执行pThre…

medium_socnet

0x00前言 靶场要安装在virtualbox &#xff08;最新版&#xff09;。否者会出现一些问题。 攻击机&#xff1a;kali2024 靶机&#xff1a;medium_socnet 0x01信息搜集 因为把靶机和虚拟机啊放在了同一网段。 所以我先使用了 arp-scan,查看有多少同一网段ipUP 。 经过推断…

OSS对象资源管理

1、登录aliyun 1.1、什么是OSS&#xff1f;有什么用&#xff1f; OSS 是“Object Storage Service”的缩写&#xff0c;中文常称为“对象存储服务”。OSS 是一种互联网云存储服务&#xff0c;主要用于海量数据的存储与管理。 相较于nginx&#xff0c;OSS更灵活&#xff0c;不…

点云深度学习系列:Sam2Point——基于提示的点云分割

文章&#xff1a;SAM2POINT:Segment Any 3D as Videos in Zero-shot and Promptable Manners 代码&#xff1a;https://github.com/ZiyuGuo99/SAM2Point Demo&#xff1a;https://huggingface.co/spaces/ZiyuG/SAM2Point 1&#xff09;摘要 文章介绍了SAM2POINT&#xff0c;这是…

跟《经济学人》学英文:2024年09月14日这期 People are splurging like never before on their pets

People are splurging like never before on their pets Would you buy your furry companion a cologne? like never before&#xff1a;从未有过&#xff1b;未曾发生过 splurge&#xff1a;挥霍&#xff1b;浪费&#xff1b;破费&#xff1b;大量花费&#xff1b;过度消…

python 读取excel数据存储到mysql

一、安装依赖 pip install mysql-connector-python 二、mysql添加表students CREATE TABLE students (ID int(11) NOT NULL AUTO_INCREMENT,Name varchar(50) DEFAULT NULL,Sex varchar(50) DEFAULT NULL,PRIMARY KEY (ID) ) ENGINEInnoDB AUTO_INCREMENT13 DEFAULT CHARSETu…

S32K3 工具篇5:如何使用lauterbach下载调试elf文件

S32K3 工具篇5&#xff1a;如何使用lauterbach下载调试elf文件 一&#xff0c;利用trace32现有flash脚本烧录elf二&#xff0c;debug 现有elf文件 之前写过如何在S32DS中使用lauterbach下载&#xff0c;但是对于RTD EB MCAL的代码&#xff0c;通常情况下是使用命令的方式去编译…

Spring Boot母婴商城:安全、便捷、高效

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&#xff0c;SpringMVC也可以。SSH框架…

C语言 | Leetcode C语言题解之第399题除法求值

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/typedef struct hash_node_t {char *key;double val;int distinguish_flag; // 用于区分不同的关系struct hash_node_t *p_next; }HASH_NODE_T;typedef str…

clip论文阅读(Learning Transferable Visual Models From Natural Language Supervision)

目录 摘要训练pre-train model的过程将pre-train model应用于下游任务应用&#xff08;待更新&#xff09; 论文/项目地址&#xff1a;https://github.com/OpenAI/CLIP 提供了clip的pre-trained model的权重&#xff0c;也可安装使用pre-trained model 摘要 使用标签标注的图…

【IEEEACM Fellow、CCF组委】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天津 | 2024年10月25-27日 | 会议官网&#xff1a;www.aiiip.net 会…

【CTF MISC】XCTF GFSJ1086 [简单] 简单的base编码 Writeup(Base64编码+循环解码+Base92编码)

[简单] 简单的base编码 你懂base编码吗&#xff1f; 工具 在线BASE92编码解码&#xff1a;https://ctf.bugku.com/tool/base92 解法 Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTVjAxV2JETlhhMUpUVmpBeFYySkVUbGhoTVVwVVZtcEJlRll5U2tWVWJHaG9UVlZ3VlZadGNFSmxSbGw1V…

数据集 wider person 户外密集行人检测 >> DataBall

数据集 wider person 用于野外密集行人检测的多样化数据集 行人检测 目标检测 户外密集行人检测的多样化数据集 WiderPerson: A Diverse Dataset for Dense Pedestrian Detection in the Wild article{zhang2019widerperson, Author {Zhang, Shifeng and Xie, Yiliang and Wa…

蛋白质结构变换中的四元数和旋转矩阵介绍

在蛋白质结构变换中,四元数和旋转矩阵都是用来描述旋转的重要工具。 一、旋转矩阵 定义与形式: 旋转矩阵是一个 33 的矩阵,用于将一个向量在三维空间中进行旋转操作。它可以表示为:其中,每个元素都是实数,且满足一定的正交性条件,即旋转矩阵的逆等于它的转置。作用原理…

Stanley算法原理

Stanley Controller与Pure Pursuit算法类似&#xff0c;其同样是基于几何追踪的轨迹跟踪控制器&#xff0c;但是与Pure Pursuit不同的是&#xff0c;Stanley Controller算法基于前轮中心点为参考点进行控制&#xff0c;没有预瞄距离&#xff0c;以前轮中心点与最近参考轨迹点进…

『功能项目』切换职业面板【48】

我们打开上一篇47技能冷却蒙版的项目&#xff0c; 本章要做的事情是切换职业UI面板的功能 首先双击打开Canvas预制体在左上主角面板信息中新建一个button按钮 重命名&#xff08;父物体是按钮Button&#xff0c;子物体Image即可&#xff09; 创建一个Image 设计一下布局 复制三…

每日学习一个数据结构-B+树

文章目录 什么是B树示意图B树的基本特点B树的优点B树的应用场 B树分裂和合并的机制节点分裂节点合并注意事项 什么是B树 B树是一种自平衡的树数据结构&#xff0c;广泛应用于数据库和操作系统的索引结构中&#xff0c;特别是在MySQL的InnoDB存储引擎中。它通过保持数据排序&am…

Linux基础-Makefile的编写、以及编写第一个Linux程序:进度条(模拟在 方便下载的同时,更新图形化界面)

目录 一、Linux项目自动化构建工具-make/Makefile ​编辑 背景&#xff1a; makefile小技巧&#xff1a; 二、Linux第一个小程序&#xff0d;进度条 先导&#xff1a; 1.如何利用/r,fflush(stdout)来实现我们想要的效果&#xff1b; 2.写一个倒计时&#xff1a; 进度条…

[数据集][目标检测]智慧交通铁路人员危险行为躺站坐检测数据集VOC+YOLO格式3766张4类别

图片数量(jpg文件个数)&#xff1a;3766 标注数量(xml文件个数)&#xff1a;3766 标注数量(txt文件个数)&#xff1a;3766 标注类别数&#xff1a;4 标注类别名称:["sitting","sleeping","standing","track"] 每个类别标注的框数&…

可解释性机器学习中的局部解释

可解释性机器学习可以被分成两大类&#xff0c;第一大类叫做局部的解释&#xff0c;第二大类叫做全局的 解释&#xff0c;如图 1 所示。局部的解释是&#xff0c;比如有一个图像分类器&#xff0c;输入一张图片&#xff0c;它会判断出 是一只猫&#xff0c;机器要回答问题是为什…