C++ I/O操作---输入输出

本文主要介绍C++ I/O操作中的输入输出流。

目录

1 输入输出

2 输入输出流分类

3 C++中的输入输出流

4 iostream

5 std::ofstream

6 std::fstream

7 std::getline


1 输入输出

        C++的输入输出是数据在不同设备之间的传输,即在硬盘、内存和外设之间的传输。 

        数据如水流一样在各个设备之间传输,因此称为输入输出流。     

        输入操作:指数据传外设(一般是显示器)传入内存,或者从硬盘读取到内存,称为输入流,输入操作就是将外设数据或者硬盘数据转换成输入流,输入流在内存中存储。        

        输出操作:指数据从内存输出到外设(一般是显示器),或者输出保存到文件存储在硬盘中,此时的数据称为输出流,输出流在内存中,将输出流输出到外设或者硬盘的操作叫输出操作。

2 输入输出流分类

        根据I/O操作对象的不同,将I/O操作分为三类:

        (1)标准I/O——以标准输入、输出设备为操作对象

        (2)文件I/O——以磁盘文件为操作对象

        (3)字符串I/O——以内存中指定的空间(通常为字符数组)为操作对象

3 C++中的输入输出流

  1. istream(输入流):用于从文件、字符串或其他数据源读取数据的类。常用的成员函数有>>(插入运算符重载)和read()
  2. ostream(输出流):用于向文件、字符串或其他数据目标写入数据的类。常用的成员函数有<<(插入运算符重载)和write()
  3. ifstream(输入文件流):继承自istream,用于从文件中读取数据的类。常用成员函数有open()close()is_open()等。
  4. ofstream(输出文件流):继承自ostream,用于向文件中写入数据的类。常用成员函数有open()close()is_open()等。
  5. stringstream(字符串流):继承自istreamostream,用于在内存中读写字符串的类。常用成员函数有str()clear()seekg()等。

istream 和 ostream 类都在 <iostream>头文件中,ifstream和ofstream都在fstream。

4 iostream

iostream是C++标准库中的一个头文件,它包含了用于输入输出操作的类和函数。在C++程序中,我们使用iostream来处理文本、二进制数据以及控制台输入输出。

以下是一些常用的iostream类和函数:

  1. cin:用于从标准输入(通常是键盘)读取数据。
  2. cout:用于向标准输出(通常是屏幕)写入数据。
  3. cerr:用于向标准错误输出(通常是屏幕)写入错误信息。
  4. endl:用于插入换行符并刷新缓冲区。
  5. flush:用于清空输出缓冲区,但不插入换行符。
  6. getline(cin, str):从标准输入读取一行文本并将其存储到字符串变量str中。
  7. getline(cin, str, delimiter):从标准输入读取一行文本,直到遇到指定的分隔符,并将其存储到字符串变量str中。
  8. putchar(ch):将字符ch写入标准输出。
  9. puts(str):将字符串str写入标准输出,并在末尾添加换行符。
  10. scanf:从标准输入读取格式化的数据。
  11. printf:向标准输出写入格式化的数据。

以下是一个简单的示例,演示了如何使用iostream进行输入输出操作:

#include <iostream>
#include <string>int main() {std::string name;int age;// 从标准输入读取姓名和年龄std::cout << "请输入您的姓名:";std::cin >> name;std::cout << "请输入您的年龄:";std::cin >> age;// 将姓名和年龄输出到标准输出std::cout << "您的名字是:" << name << std::endl;std::cout << "您的年龄是:" << age << std::endl;return 0;
}

在上述代码中,我们使用了std::cout对象,它是std::ostream的一个实例。通过调用<<运算符,我们将字符串"Hello, World!"写入到屏幕上,并在末尾添加了一个换行符。std::cin是std::istream的一个实例,通过调用运算符>>,将外设输入的字符保存到输入流中,回车表示结束。

除了使用std::cout之外,你还可以使用其他std::ostream对象来将数据写入到文件中。例如,以下代码将字符串写入到名为"output.txt"的文件中:

#include <fstream>int main() {std::ofstream outputFile("output.txt");if (outputFile.is_open()) {outputFile << "This is some text." << std::endl;outputFile.close();} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

在上述代码中,我们使用了std::ofstream对象来打开一个文件,并将字符串写入其中。如果文件成功打开,我们使用<<运算符将文本写入文件,并在末尾添加了一个换行符。最后,我们关闭了文件。

总之,std::ostream是一个非常重要的类,它提供了一种灵活的方式来将数据写入到各种输出设备中。通过使用std::ostream对象,你可以方便地实现各种输出操作。

5 std::ofstream

std::ofstream是C++标准库中的一个类,用于创建和写入文件。它属于<fstream>头文件。使用std::ofstream可以方便地将数据写入到文件中。

以下是一个简单的示例,演示如何使用std::ofstream创建一个文件并写入一些文本:

#include <iostream>
#include <fstream>int main() {// 创建一个名为"example.txt"的文件std::ofstream file("example.txt");// 检查文件是否成功打开if (!file.is_open()) {std::cerr << "无法打开文件" << std::endl;return 1;}// 向文件中写入文本file << "这是一个示例文本。" << std::endl;// 关闭文件file.close();std::cout << "文件已成功写入。" << std::endl;return 0;
}

在这个示例中,我们首先包含了<fstream>头文件,然后在main函数中创建了一个std::ofstream对象,并指定了要创建的文件名。接着,我们检查文件是否成功打开,如果成功打开,就向文件中写入一行文本。最后,我们关闭文件并输出一条消息表示文件已成功写入。

6 std::fstream

`std::fstream`是C++标准库中的一个类,用于文件的输入/输出操作。它提供了对文件的基本读写功能,包括打开、关闭、读取和写入等操作。使用`std::fstream`可以方便地处理文本文件和二进制文件。

以下是使用std::fstream进行文件读写操作的示例:

#include <iostream>
#include <fstream>
#include <string>int main() {// 打开一个文件用于写入std::ofstream outFile("example.txt");if (!outFile) {std::cerr << "无法打开文件" << std::endl;return 1;}// 写入一些文本到文件中outFile << "这是一段示例文本。" << std::endl;outFile << "使用std::fstream进行文件操作。" << std::endl;// 关闭文件outFile.close();// 打开一个文件用于读取std::ifstream inFile("example.txt");if (!inFile) {std::cerr << "无法打开文件" << std::endl;return 1;}// 从文件中读取文本并输出到控制台std::string line;while (std::getline(inFile, line)) {std::cout << line << std::endl;}// 关闭文件inFile.close();return 0;
}

这个示例中,我们首先使用std::ofstream创建一个名为example.txt的文件,并向其中写入一些文本。然后,我们使用std::ifstream打开同一个文件,并使用std::getline逐行读取文件内容,并将其输出到控制台。最后,我们关闭了两个文件流对象。

7 std::getline

std::getline是C++标准库中的一个函数,用于从输入流中读取一行文本。它的原型如下:

istream& getline(istream& is, string& str, char delim);

参数说明:

  • is:输入流对象,通常为std::cin或文件流对象。
  • str:存储读取到的文本的字符串对象。
  • delim:分隔符字符,默认为换行符('\n')。

返回值:

  • 返回引用到输入流对象的引用。

使用示例:

#include <iostream>
#include <string>int main() {std::string line;std::cout << "请输入一行文本:" << std::endl;std::getline(std::cin, line);std::cout << "你输入的文本是:" << line << std::endl;return 0;
}

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

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

相关文章

飞天使-docker知识点6-容器dockerfile各项名词解释

文章目录 docker的小技巧dockerfile容器为什么会出现启动了不暂停查看docker 网桥相关信息 docker 数据卷 docker的小技巧 [rootlight-test playbook-vars[]# docker inspect -f "{{.NetworkSettings.IPAddress}}" d3a9ae03ae5f 172.17.0.4docker d3a9ae03ae5f:/etc…

【idea】解决sprintboot项目创建遇到的问题

目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版&#xff1a;17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候&#xff0c;报java.lang.Ill…

电子元器件介绍——二极管(四)

电子元器件介绍 文章目录 电子元器件介绍前言一、二极管的基础知识二、二极管的分类三、二极管的应用总结 前言 这一节我们看一下二极管。 一、二极管的基础知识 PN结&#xff1a;是指一块半导体单晶&#xff0c;其中一部分是P型区&#xff0c;其余部分是N型区。 在电场作用…

听GPT 讲Rust源代码--src/tools(14)

File: rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs 在Rust源代码中&#xff0c;rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs这个文件是Rust语言分析器&#xff08;Rust Analyzer&#xff09;的一部分&#xff0c;用于处理和管理条件编译指令&#xff08;Cond…

打破涨粉瓶颈!如何通过视频号找热门话题?

如果你正在运营视频号&#xff0c;相信你一定会遇到这样的瓶颈&#xff0c;视频号播放不理想&#xff0c;牟足劲想涨几个粉丝&#xff0c;结果还掉粉了&#xff1f;今天我们就聊聊如何通过视频号找热门话题! 当你的播放和粉丝增长停滞 数据不好的的时候需要更新迭代 同时还需…

DeciLM-7B:突破极限,高效率、高精准度的70亿参数AI模型

引言 在人工智能领域&#xff0c;语言模型的发展速度令人瞩目。Deci团队最近推出了一款具有革命性意义的语言模型——DeciLM-7B。这款模型在速度和精确度上都实现了显著的突破&#xff0c;以其70亿参数的规模&#xff0c;在语言模型的竞争中脱颖而出。 Huggingface模型下载&am…

数据库通用语法DML-MySQL

DML&#xff08;数据操作语言&#xff09; 添加数据 指定字段&#xff1a; INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); 全部字段&#xff1a; INSERT INTO 表名 VALUES (值1, 值2, ...); 批量添加数据&#xff1a; INSERT INTO 表名 (字段名1, 字段…

torch中张量与数据类型的介绍

PyTorch张量的定义介绍 PyTorch最基本的操作对象是张量&#xff0c;它表示一个多维数组&#xff0c;类似NumPy的数组&#xff0c;但是前者可以在GPU上加速计算 初始化张量 ttorch.tensor([1,2]) # 创建一个张量 print(t) t.dtype #打印t的数据类型为torch.int…

尺度函数与小波函数

尺度函数与小波函数 尺度函数 设存在函数 φ j , k ( x ) 2 j / 2 φ ( 2 j x − k ) \varphi_{j,k}(x)2^{j/2}\varphi(2^{j}x-k) φj,k​(x)2j/2φ(2jx−k) 对所有的 j j j, k ∈ Z k{\in}\mathbb{Z} k∈Z 和 φ ( x ) ∈ L 2 ( R ) \varphi(x){\in}L^2(R) φ(x)∈L2(R)…

为什么Apache Doris适合做大数据的复杂计算,MySQL不适合?

为什么Apache Doris适合做大数据的复杂计算&#xff0c;MySQL不适合&#xff1f; 一、背景说明二、DB架构差异三、数据结构差异四、存储结构差异五、总结 一、背景说明 经常有小伙伴发出这类直击灵魂的疑问&#xff1a; Q&#xff1a;“为什么Apache Doris适合做大数据的复杂计…

大数据与深度挖掘:如何在数字营销中与研究互动

数字营销最吸引人的部分之一是对数据的内在关注。 如果一种策略往往有积极的数据&#xff0c;那么它就更容易采用。同样&#xff0c;如果一种策略尚未得到证实&#xff0c;则很难获得支持进行测试。 数字营销人员建立数据信心的主要方式是通过研究。这些研究通常分为两类&…

【教3妹学编程-算法题】找出峰值

3妹&#xff1a;2哥2哥&#xff0c;你有没有看到新闻&#xff1a;北京地铁事故中102人骨折&#xff01; 2哥 : 看到了&#xff0c;没想到坐个地铁还出事故了。 3妹&#xff1a;事故原因为雪天轨滑导致前车信号降级&#xff0c;紧急制动停车&#xff0c;后车因所在区段位于下坡地…

二维数组——特征匹配(c++)

右上左下遍历 给定一个n行m列的整数数组a&#xff0c;要求从a[0][0] 元素开始&#xff0c;按从右上到左下的对角线顺序遍历整个数组。 输出 按遍历顺序输出每个整数。每个整数占一行。 样例输入 3 3 1 2 4 3 5 7 6 8 9 样例输出 1 2 4 3 5 7 6 8 9 #include <iostream&g…

【️Java是值传递还是引用传递?】

✅Java是值传递还是引用传递&#xff1f; ✅Java是值传递还是引用传递&#xff1f;✅典型理解 ✅增加知识仓✅Java的求值策略✅Java中的对象传递✅值传递和共享对象传递的现象冲突吗? ✅总结 ✅Java是值传递还是引用传递&#xff1f; ✅典型理解 编程语言中需要进行方法间的…

一句话分清C/C++声明和定义

定义告诉编译器在在哪个位置存储变量&#xff0c;声明没有 声明&#xff1a;告诉编译器&#xff0c;变量类型和名字 定义&#xff1a;告诉编译器变量存储的位置。 举例子 int i; // 这是声明定义。声明&#xff1a;告诉编译器变量类型int,变量名字i&#xff0c; // 定义&…

kafka学习笔记--Kafka副本

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

比特币即自由

号外&#xff1a;教链内参12.15《疯狂的铭文》 文 | Ross Ulbricht. 原文标题&#xff1a;Bitcoin Equals Freedom. 2019.9.25 在中本聪发明比特币后的头一年左右&#xff0c;发生了一些特别的事情&#xff0c;不仅没有人预料到&#xff0c;甚至很多人认为不可能。试着想象一下…

昇腾Profiling性能分析工具使用问题案例

昇腾Profiling性能分析工具用于采集和分析运行在昇腾硬件上的AI任务各个运行阶段的关键性能指标, 用户可根据输出的性能数据&#xff0c;快速定位软、硬件性能瓶颈&#xff0c;提升AI任务性能分析的效率。具体使用方法请参考&#xff1a; 本期分享几个关于Profiling性能分析工具…

C语言 打印 以这个RFC1123格式(“EEE, dd MMM yyyy HH:mm:ss z“) 格林威治时间

在C语言中&#xff0c;要按照RFC 1123格式打印格林威治时间&#xff08;包括完整的星期名称、日期、月份、年份、小时、分钟和秒&#xff09;&#xff0c;你需要使用strftime函数&#xff0c;并且指定相应的格式化字符串。以下是一个示例代码&#xff1a;#include <stdio.h&…

【CMU 15-445】Lecture 11: Joins Algorithms 学习笔记

Joins Algorithms Nested Loop JoinNaive Nested Loop JoinBLock Nested Loop JoinIndex Nested Loop Join Sort-Merge JoinHash JoinBasic Hash JoinPartitioned Hash Join Conclusion 本节课主要介绍的是数据库系统中的一些Join算法 Nested Loop Join Naive Nested Loop Joi…