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

【C++】流(Stream)详解:标准流、文件流和字符串流

【C++】流(Stream)详解:标准流、文件流和字符串流

在C++编程中,流(Stream)是一个非常重要的概念,它为我们提供了统一的数据输入输出接口。本文将详细介绍C++中的三种主要流类型:标准流、文件流和字符串流。

一、标准流(Standard Streams)

标准流是C++预定义的流对象,用于基本的输入输出操作,主要包括:

1. cin (标准输入流)

#include <iostream>int main() {int age;std::cout << "请输入您的年龄: ";std::cin >> age;  // 从标准输入读取数据std::cout << "您的年龄是: " << age << std::endl;return 0;
}

2. cout (标准输出流)

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;  // 输出到标准输出std::cout << "数字: " << 42 << std::endl;return 0;
}

3. cerr (标准错误流,无缓冲)

#include <iostream>int main() {if (some_error_condition) {std::cerr << "发生了一个严重的错误!" << std::endl;  // 立即输出}return 0;
}

4. clog (标准错误流,有缓冲)

#include <iostream>int main() {std::clog << "这是一条日志信息" << std::endl;  // 缓冲输出return 0;
}

特点比较:

  • cout用于常规输出
  • cerr用于错误信息,无缓冲,立即显示
  • clog用于日志信息,有缓冲

二、文件流(File Streams)

文件流用于文件的读写操作,需要包含<fstream>头文件。

1. ifstream (输入文件流)

#include <fstream>
#include <iostream>int main() {std::ifstream inputFile("example.txt");  // 打开文件if (!inputFile) {std::cerr << "无法打开文件!" << std::endl;return 1;}std::string line;while (std::getline(inputFile, line)) {  // 逐行读取std::cout << line << std::endl;}inputFile.close();  // 关闭文件return 0;
}

2. ofstream (输出文件流)

#include <fstream>
#include <iostream>int main() {std::ofstream outputFile("output.txt");  // 打开文件if (!outputFile) {std::cerr << "无法创建文件!" << std::endl;return 1;}outputFile << "这是第一行" << std::endl;  // 写入数据outputFile << "这是第二行" << std::endl;outputFile.close();  // 关闭文件return 0;
}

3. fstream (文件流,可读可写)

#include <fstream>
#include <iostream>int main() {std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::app);if (!file) {std::cerr << "文件操作失败!" << std::endl;return 1;}file << "追加的内容" << std::endl;  // 写入file.seekg(0);  // 回到文件开头std::string content;while (std::getline(file, content)) {  // 读取std::cout << content << std::endl;}file.close();return 0;
}

文件打开模式:

  • ios::in - 读模式
  • ios::out - 写模式
  • ios::app - 追加模式
  • ios::trunc - 截断模式(如果文件存在则清空)
  • ios::binary - 二进制模式

三、字符串流(String Streams)

字符串流允许我们像操作流一样操作字符串,需要包含<sstream>头文件。

1. istringstream (输入字符串流)

#include <sstream>
#include <iostream>int main() {std::string data = "John 25 3.8";std::istringstream iss(data);std::string name;int age;float gpa;iss >> name >> age >> gpa;  // 从字符串解析数据std::cout << "姓名: " << name << std::endl;std::cout << "年龄: " << age << std::endl;std::cout << "GPA: " << gpa << std::endl;return 0;
}

2. ostringstream (输出字符串流)

#include <sstream>
#include <iostream>int main() {std::ostringstream oss;oss << "圆周率: " << 3.14159 << std::endl;oss << "2的平方: " << 2 * 2 << std::endl;std::string result = oss.str();  // 获取构建的字符串std::cout << result;return 0;
}

3. stringstream (字符串流,可读可写)

#include <sstream>
#include <iostream>int main() {std::stringstream ss;// 写入数据ss << "混合数据: ";ss << 42 << ' ' << 3.14;// 读取数据std::string prefix;int num;double pi;ss >> prefix >> num >> pi;std::cout << prefix << " " << num << " " << pi << std::endl;return 0;
}

常见用途:

  • 数据类型转换
  • 字符串拼接
  • 复杂字符串解析
  • 格式化输出到字符串

四、流的通用操作

所有流类型都支持一些通用操作:

  1. 状态检查

    if (myStream.good()) { /* 流状态正常 */ }
    if (myStream.eof()) { /* 到达文件末尾 */ }
    if (myStream.fail()) { /* 操作失败 */ }
    if (myStream.bad()) { /* 严重错误 */ }
    
  2. 清除状态标志

    myStream.clear();  // 清除所有错误状态
    
  3. 获取/设置位置

    std::streampos pos = myStream.tellg();  // 获取当前位置
    myStream.seekg(0, std::ios::beg);      // 回到开头
    

五、总结

C++的流库提供了强大而灵活的数据处理能力:

  1. 标准流:处理基本的控制台输入输出
  2. 文件流:读写文件数据
  3. 字符串流:在内存中处理字符串数据

理解这些流的概念和用法对于C++编程至关重要,它们不仅提供了统一的操作接口,还能帮助我们编写更清晰、更健壮的代码。

相关文章:

【C++】流(Stream)详解:标准流、文件流和字符串流

【C】流(Stream)详解&#xff1a;标准流、文件流和字符串流 在C编程中&#xff0c;流(Stream)是一个非常重要的概念&#xff0c;它为我们提供了统一的数据输入输出接口。本文将详细介绍C中的三种主要流类型&#xff1a;标准流、文件流和字符串流。 一、标准流(Standard Strea…...

基于 Spring Boot 瑞吉外卖系统开发(十三)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十三&#xff09; 查询套餐 在查询套餐信息时包含套餐的分类名&#xff0c;分类名称在category表中&#xff0c;因此这里需要进行两表关联查询。 自定义SQL如下&#xff1a; select s.* ,c.name as category_name from setmeal…...

POSE识别 神经网络

Pose 识别模型介绍 Pose 识别是计算机视觉领域的一个重要研究方向&#xff0c;其目标是从图像或视频中检测出人体的关键点位置&#xff0c;从而估计出人体的姿态。这项技术在许多领域都有广泛的应用&#xff0c;如动作捕捉、人机交互、体育分析、安防监控等。 Pose 识别模型的…...

CSS3 基础知识、原理及与CSS的区别

CSS3 基础知识、原理及与CSS的区别 CSS3 基础知识 CSS3 是 Cascading Style Sheets 的第3个版本&#xff0c;是CSS技术的升级版本&#xff0c;于1999年开始制订&#xff0c;2001年5月23日W3C完成了CSS3的工作草案。 CSS3 主要模块 选择器&#xff1a;更强大的元素选择方式盒…...

电能质量扰动信号信号通过hilbert变换得到瞬时频率

利用Hilbert变换从电能质量扰动信号中提取瞬时频率、瞬时幅值、Hilbert谱和边际谱的详细步骤及MATLAB代码实现。该流程适用于电压暂降、暂升、谐波、闪变等扰动分析。 1. Hilbert变换与特征提取流程 1.1 基本步骤 信号预处理&#xff1a;滤波去噪&#xff08;如小波去噪&…...

Linux工作台文件操作命令全流程解析(高级篇之awk精讲)

全文目录 1 工具介绍2 核心优势3 命令格式3.1 命令格式说明3.2 组成部分详解3.2.1 选项3.2.2 模式3.2.3 动作3.2.4 输入文件 4 使用说明4.1 常用示例4.2 awk 编程解析4.2.1 基础说明4.2.2 编程进阶 4.3 温馨提示 5 内置变量6 参考文献 写在前面 前面一篇《Linux工作台文件操作命…...

力扣119题:杨辉三角II(滚动数组)

小学生一枚&#xff0c;自学信奥中&#xff0c;没参加培训机构&#xff0c;所以命名不规范、代码不优美是在所难免的&#xff0c;欢迎指正。 标签&#xff1a; 杨辉三角、滚动数组 语言&#xff1a; C 题目&#xff1a; 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角…...

c++:算法(Algorithms)

目录 常用 STL 算法 1️⃣ std::sort&#xff08;排序&#xff09; 2️⃣ std::find&#xff08;查找等于某值的元素&#xff09; 3️⃣ std::count&#xff08;统计出现次数&#xff09; 4️⃣ std::next&#xff08;获取迭代器的下一个位置&#xff09; 5️⃣ .erase(…...

大疆无人机(全系列,包括mini)拉流至电脑,实现直播

参考视频 【保姆级教程】大疆无人机rtmp推流直播教程_哔哩哔哩_bilibili VLC使用教程&#xff1a; VLC工具使用指南-CSDN博客 目录 实现效果&#xff1a; 电脑端 ​编辑 ​编辑 无人机端 VLC拉流 分析 实现效果&#xff1a; (实验机型&#xff1a;大疆mini4kRC-N2遥控器、大…...

uniapp-商城-54-后台 新增商品(页面布局)

后台页面中还存在商品信息的添加和修改等。接下来我们逐步进行分析和展开。包含页面布局和数据库逻辑等等。 1、整体效果 样式效果如下&#xff0c;依然采用了表单形式来完成和商家信息差不多&#xff0c;但在商品属性上多做了一些弹窗等界面&#xff0c;样式和功能点表多。 …...

深入浅出MySQL 8.0:新特性与最佳实践

MySQL作为开源关系型数据库的佼佼者&#xff0c;近年来持续更新迭代&#xff0c;尤其是在8.0版本中引入了一系列令人兴奋的新特性。本文将介绍一些MySQL 8.0的关键新功能&#xff0c;并提供最佳实践&#xff0c;旨在帮助开发人员和DBA更好地利用这一强大的数据库管理系统。 一…...

JIT+Opcache如何配置才能达到性能最优

首先打开php.ini文件&#xff0c;进行配置 1、OPcache配置 ; 启用OPcache opcache.enable1; CLI环境下启用OPcache&#xff08;按需配置&#xff09; opcache.enable_cli0; 预加载脚本&#xff08;PHP 7.4&#xff0c;加速常用类&#xff09; ; opcache.preload/path/to/prel…...

(2)python开发经验

文章目录 1 pyside6加载ui文件2 使用pyinstaller打包 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 pyside6加载ui文件 方法1&#xff1a; 直接加载ui文件 from PySide6.QtWidgets import QAp…...

WebpackVite总结篇与进阶

模块化 Webpack Webpack 入口entry 分离app和第三方库入口 这是什么&#xff1f; 这是告诉 webpack 我们想要配置 2 个单独的入口点&#xff08;例如上面的示例&#xff09;。 为什么&#xff1f; 这样你就可以在 vendor.js 中存入未做修改的必要 library 或文件&#xff0…...

【python】基础知识点100问

以下是Python基础语法知识的30条要点整理,涵盖数据类型、函数、控制结构等核心内容,结合最新资料归纳总结: 基础30问 一、函数特性 函数多返回值 支持用逗号分隔返回多个值,自动打包为元组,接收时可解包到多个变量 def func(): return 1, "a" x, y = func()匿…...

uniapp 百家云直播插件打包失败

打包错误日志 Android自有证书 打包失败 错误日志: https://app.liuyingyong.cn/build/errorLog/cf41a610-effe-11ef-88db-05262d4c3e5d原因&#xff1a;需要导入插件依赖 依赖地址&#xff1a;https://ext.dcloud.net.cn/plugin?id16289 百家云直播插件地址 直播插…...

SpringBoot--springboot简述及快速入门

spring Boot是spring提供的一个子项目&#xff0c;用于快速构建spring应用程序 传统方式&#xff1a; 在众多子项目中&#xff0c;spring framework项目为核心子项目&#xff0c;提供了核心的功能&#xff0c;其他的子项目都需要依赖于spring framework&#xff0c;在我们实际…...

vscode_python远程调试_pathMappings配置说明

1.使用说明 vscode python 远程调试pathMappings 配置 launch.json "pathMappings": [{"localRoot": "本地代码目录","remoteRoot": "远程代码目录" # 注意不是运行目录, 是远程代码的目录}],2.测试验证 测试目的: 远程代…...

遨游5G-A防爆手机:赋能工业通信更快、更安全

在工业数字化转型与5G-A商用进程加速的双重驱动下&#xff0c;中国防爆手机市场正迎来历史性发展机遇。作为“危、急、特”场景通信解决方案服务商&#xff0c;遨游通讯深刻洞察到&#xff1a;当5G-A网络以超高速率、海量连接和毫秒级时延重塑行业生态时&#xff0c;防爆手机这…...

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互

Profibus DP主站与Modbus RTU/TCP网关与海仕达变频器轻松实现数据交互 Profibus DP主站转Modbus RTU/TCP&#xff08;XD-MDPBm20&#xff09;网关在Profibus总线侧实现主站功能&#xff0c;在Modbus串口侧实现从站功能。可将ProfibusDP协议的设备&#xff08;如&#xff1a;海…...

C++八股——智能指针

文章目录 1. 背景2. 原理与使用2.1 auto_ptr2.2 unique_ptr2.3 shared_ptr2.4 weak_ptr2.5 定制删除器 1. 背景 智能指针不是指针&#xff0c;是一个管理指针的类&#xff0c;用来存储指向动态分配对象的指针&#xff0c;负责自动释放动态分配的对象&#xff0c;防止堆内存泄漏…...

「华为」人形机器人赛道投资首秀!

温馨提示&#xff1a;运营团队2025年最新原创报告&#xff08;共210页&#xff09; —— 正文&#xff1a; 近日&#xff0c;【华为】完成具身智能赛道投资首秀&#xff0c;继续加码人形机器人赛道布局。 2025年3月31日&#xff0c;具身智能机器人头部创企【千寻智能&#x…...

格雷希尔G10和G15系列自动化快速密封连接器,适用于哪些管件的密封,以及它们相关的特性有哪些?

格雷希尔G10和G15系列快速密封连接器&#xff0c;用于自动化和半自动化过程中的外部或内部密封&#xff0c;通过使用气压驱动来挤压内部的密封圈&#xff0c;创造一个适用于各种管件的无泄漏密封连接&#xff0c;连接器内部的弹性密封圈可以提供其他产品不能提供的卓越密封性能…...

mac一键安装gpt-sovit教程中,homebrew卡住不动的问题

mac一键安装gpt-sovit教程 仅作为安装过程中解决homebrew卡住问题的记录 资源地址 https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/znoph9dtetg437xb#mlAoP 下载一键包 下载后并解压&#xff0c;找到install for mac.sh&#xff0c;终端执行bash空格拖拽in…...

专栏特辑丨悬镜浅谈开源风险治理之SBOM与SCA

随着容器、微服务等新技术日新月异&#xff0c;开源软件成为业界主流形态&#xff0c;软件行业快速发展。但同时&#xff0c;软件供应链也越来越趋于复杂化和多样化&#xff0c;软件供应链安全风险不断加剧。 软件供应链安全主要包括软件开发生命周期和软件生存运营周期&#x…...

vue3项目创建-配置-elementPlus导入-路由自动导入

目录 方法一&#xff1a;create-vue 方法二 &#xff1a;Vite Vue Vite.config.ts配置 引入element-plus 安装 如何在项目中使用 Element Plus 完整引入 按需导入 vue3vite中自动配置路由的神器&#xff1a;vite-plugin-pages 1. 安装 2、修改vite.config.js中配置…...

MUSE Pi Pro 编译kernel内核及创建自动化脚本进行环境配置

视频讲解&#xff1a; MUSE Pi Pro 编译kernel内核及创建自动化脚本进行环境配置 今天分享的主题为创建自动化脚本编译MUSE Pi Pro的kernel内核&#xff0c;脚本已经上传到中 GitHub - LitchiCheng/MUSE-Pi-Pro-Learning: MUSE-Pi-Pro-Learning &#xff0c;有需要可以自行clon…...

Java大师成长计划之第20天:Spring Framework基础

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在Java开发领域&#xff0c;Spring …...

Innovus 25.1 版本更新:助力数字后端物理设计新飞跃

在数字后端物理设计领域&#xff0c;每一次工具的更新迭代都可能为项目带来巨大的效率提升与品质优化。今天&#xff0c;就让我们一同聚焦 Innovus 25.1 版本&#xff08;即 25.10 版本&#xff09;的更新要点&#xff0c;探寻其中蕴藏的创新能量。 一、核心功能的强势进 AI…...

FastAPI 和 MongoDB 实现请求头参数处理的示例,并在 React 中进行渲染

FastAPI 和 MongoDB 后端 安装必要的库 安装 FastAPI、Uvicorn、Motor&#xff08;用于 MongoDB 的异步驱动&#xff09;和 Pydantic&#xff08;用于数据验证&#xff09;。 pip install fastapi uvicorn motor pydantic创建 FastAPI 应用 创建一个文件 main.py&#xff0c;并…...