当前位置:首页 » 《随便一记》 » 正文

【C++入门到精通】C++的IO流(输入输出流) [ C++入门 ]

7 人参与  2024年02月11日 14:16  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述

阅读导航

引言一、C语言的输入与输出二、流是什么三、C++IO流1. C++标准IO流(1)istream(2)ostream(3)iostream(4)cin 和 cout 2. C++文件IO流(1)ifstream(2)ofstream(3)fstream 四、stringstream的简单介绍温馨提示

引言

C++中的IO流(输入输出流)是程序与外部环境之间进行数据交互的重要手段。通过IO流,程序可以从外部读取数据或将数据输出到外部,实现了程序与用户、其他程序和设备之间的数据传输。C++标准库提供了丰富的IO流类和函数,通过这些类和函数,开发者能够方便地实现各种类型的IO操作。本文将介绍IO流的基本概念和相关类,讲解如何在C++程序中使用IO流实现输入输出操作,并给出相应的示例代码以说明其用法。同时,还将介绍一些常见的IO流操作技巧和使用注意事项,帮助读者更好地掌握和应用C++中的IO流机制。通过学习本文,读者将能够深入理解C++中的IO流,掌握IO流的使用方法,提高程序的输入输出效率和稳定性。

一、C语言的输入与输出

C语言中我们用到的最频繁的输入输出方式就是scanf ()printf()

scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)

??注意宽度输出和精度输出控制

C语言借助了相应的缓冲区来进行输入与输出。如下图所示:
在这里插入图片描述
⭕对输入输出缓冲区的理解:

可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”

二、流是什么

“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bitbytepacket )的抽象描述。

C++中的流是一种抽象描述,用于表示数据从一个地方(输入设备)流向另一个地方(输出设备)的过程。它描述了数据以有序连续和具有方向性的方式流动的特性。在C++中,流被比喻为信息从外部输入设备(如键盘)向计算机内部(如内存)输入,或者从内存向外部输出设备(如显示器)输出的过程。为了实现这种流动,C++提供了I/O标准类库,其中的每个类都被称为流或流类,用于完成不同方面的输入输出功能。通过使用这些流类,我们可以实现数据的输入和输出操作,实现与外部环境的交互。

?C++提供的I/O标准类库

在这里插入图片描述

三、C++IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类
在这里插入图片描述

1. C++标准IO流

C++标准库提供了4个全局流对象cincoutcerrclog使用cout进行标准输出,即数据从内存流向控制台(显示器)。使用cin进行标准输入即数据通过键盘输入到程序中,同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出,从上图可以看出,coutcerrclogostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不同。

在这里插入图片描述

(1)istream

istream 是输入流的基类,它提供了从外部读取数据的功能。常用的 istream 类有 istream, ifstream(从文件读取)和 istringstream(从字符串读取)。

⭕常用的 istream 函数包括:

get():从流中获取下一个字符并返回其 ASCII 值。getline():从流中读取一行文本,并将其存储在指定的字符串变量中。operator>>:从流中读取数据并将其存储在指定的变量中。

例如:

int num;std::cin >> num; // 从标准输入设备读取一个整数

(2)ostream

ostream 是输出流的基类,它提供了向外部写入数据的功能。常用的 ostream 类有 ostream, ofstream写入到文件)和 ostringstream写入到字符串)。

⭕常用的 ostream 函数包括:

put():向流中写入一个字符。write():向流中写入指定长度的数据。operator<<:向流中写入数据。

例如:

int num = 42;std::cout << "The answer is: " << num << std::endl; // 输出 "The answer is: 42"

(3)iostream

iostream 是同时具有输入和输出功能的流类,继承自 istreamostream。常用的 iostream 类有 iostreamfstream(用于文件输入输出)和 stringstream(用于字符串输入输出)。

例如:

int num;std::cin >> num; // 从标准输入设备读取一个整数std::cout << "You entered: " << num << std::endl; // 输出 "You entered: 42"

(4)cin 和 cout

cincout 是预定义的 istreamostream 对象,它们分别用于从标准输入设备(通常是键盘)读取数据和向标准输出设备(通常是屏幕)写入数据。

例如:

int num;std::cout << "Enter a number: ";std::cin >> num; // 从标准输入设备读取一个整数std::cout << "You entered: " << num << std::endl; // 输出 "You entered: 42"

除此之外,C++标准IO流还提供了一些其他重要的类和函数,如格式化输入输出、流状态检查和文件输入输出等。你可以通过查阅相关文档或教程深入了解更多关于C++标准IO流的知识。

2. C++文件IO流

C++文件IO流是C++标准库提供的用于文件输入和输出的一组类和函数。它们可以用于读取和写入文件中的数据。

⭕C++文件IO流主要涉及以下几个类:

(1)ifstream

ifstream:用于从文件中读取数据的输入流类。通过创建 ifstream 对象,可以打开一个文件并从中读取数据。

⭕常用的 ifstream 成员函数有:

open():打开指定的文件。close():关闭当前打开的文件。is_open():检查文件是否成功打开。operator>>:从文件中读取数据。

示例代码:

#include <fstream>#include <iostream>int main() {    std::ifstream file("example.txt");    if (file.is_open())     {        int num;        while (file >> num)         {            std::cout << num << std::endl; // 输出文件中的整数        }        file.close();    }     else     {        std::cerr << "Failed to open file." << std::endl;    }    return 0;}

(2)ofstream

ofstream:用于向文件中写入数据的输出流类。通过创建 ofstream 对象,可以打开一个文件并向其中写入数据。

⭕常用的 ofstream 成员函数有:

open():打开指定的文件。close():关闭当前打开的文件。is_open():检查文件是否成功打开。operator<<:将数据写入文件。

示例代码:

#include <fstream>int main() {    std::ofstream file("example.txt");    if (file.is_open()) {        file << "Hello, World!" << std::endl; // 向文件中写入字符串        file.close();    } else {        std::cerr << "Failed to open file." << std::endl;    }    return 0;}

(3)fstream

fstream:同时具有读取和写入功能的文件流类。通过创建 fstream 对象,可以打开一个文件并在其中进行读写操作。

⭕常用的 fstream 成员函数除了可以使用 ifstreamofstream 的成员函数外,还包括:

seekg():设置输入位置指针(用于读取)。seekp():设置输出位置指针(用于写入)。

示例代码:

#include <fstream>#include <iostream>int main() {    std::fstream file("example.txt", std::ios::in | std::ios::out);    if (file.is_open())     {        int num;        while (file >> num)         {            std::cout << num << std::endl; // 从文件中读取整数并输出        }        file.seekp(0, std::ios::end); // 将输出位置指针移动到文件末尾        file << "New data" << std::endl; // 向文件中写入新数据        file.close();    }     else     {        std::cerr << "Failed to open file." << std::endl;    }    return 0;}

在使用文件IO流时,需要包含头文件 <fstream>,并根据需要选择适当的流对象(ifstreamofstreamfstream)。

四、stringstream的简单介绍

stringstream 是 C++ 标准库中的一个流类,它可以像 coutcin 一样进行输入输出操作。不同之处在于 stringstream 不是对控制台进行输入输出,而是对字符串进行输入输出。

stringstream 继承自 istreamostream,因此它既可以进行输入操作,也可以进行输出操作。stringstream 的主要作用是将数据转换为字符串或从字符串中读取数据。使用 stringstream 可以方便地进行格式化输出和解析字符串。

stringstream 的头文件是 <sstream>,它定义了以下三个类:

std::istringstream:从字符串中读取数据的输入流。std::ostringstream:将数据输出到字符串的输出流。std::stringstream:既可以输入数据,也可以输出数据的流。

使用 stringstream 进行输入输出操作的一般流程如下:

创建 stringstream 对象

可以使用默认构造函数创建一个空的 stringstream 对象,例如:

std::stringstream ss;
输入数据

可以使用运算符 << 将数据写入 stringstream 中,例如:

int num = 123;std::string str = "hello";ss << "The number is: " << num << ", the string is: " << str;
输出数据

可以使用成员函数 str()str(std::string&) 获取 stringstream 所包含的字符串,例如:

std::string output = ss.str();std::cout << output << std::endl; // 输出:The number is: 123, the string is: hello
解析字符串

可以使用运算符 >>stringstream 中读取数据,例如:

std::string input = "123 4.56 hello";int num;double d;std::string str;ss.clear(); // 清空 stringstream 对象ss.str(input);ss >> num >> d >> str;std::cout << num << " " << d << " " << str << std::endl; // 输出:123 4.56 hello

??注意:在读取数据之前应该先清空 stringstream 对象,并使用成员函数 str(std::string&) 将要解析的字符串写入 stringstream

温馨提示

感谢您对博主文章的关注与支持!另外,我计划在未来的更新中持续探讨与本文相关的内容,会为您带来更多关于C++以及编程技术问题的深入解析、应用案例和趣味玩法等。请继续关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。期待与您建立更紧密的互动,共同探索C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!


点击全文阅读


本文链接:http://zhangshiyu.com/post/68152.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1