C++流 小结

C++流(Stream)是C++标准库中的一个重要组成部分,它提供了一种面向对象的方式来处理输入和输出操作。流可以将数据从一个地方传输到另一个地方,这个过程就像水流一样,因此被称为“流”。在C++中,流的实现主要依赖于标准模板库(STL)中的<iostream><fstream><sstream>等头文件。

1、标准I/O流 

内存与标准输入输出设备之间信息的传递

    std::cin:标准输入流,用于从键盘读取数据。

    std::cout:标准输出流,用于向屏幕输出数据。

    std::cerr:标准错误流,也用于向屏幕输出数据,但通常用于显示程序运行时的错误信息,它的缓冲区会立即刷新,确保错误消息能够立即被看到。

    std::clog:日志流,与cerr类似,但其行为与cout相同,即只有当缓冲区满或手动刷新时才会输出。

2、文件I/O流  

内存与外文件之间信息的传递

文件I/O流类位于<fstream>头文件中,它们允许程序从文件读取数据和向文件写入数据。

    std::ifstream:输入文件流,用于打开并读取文件。

    std::ofstream:输出文件流,用于创建并写入文件。

    std::fstream:输入/输出文件流,既可以读取也可以写入文件。

使用这些流时,需要先打开文件,然后进行读写操作,最后关闭文件。

例如:

#include <fstream>

int main()

{

    std::ifstream input("input.txt");

if (input)

 {

        // 读取文件内容

    }

    input.close();

    std::ofstream output("output.txt");

if (output)

{

        // 写入文件内容

    }

    output.close();

    return 0;

}

3、字符串I/O流 

内存变量与表示字符串流的字符数组之间信息的传递

字符串I/O流位于<sstream>头文件中,它们允许程序像操作文件一样操作内存中的字符串。

    std::istringstream:输入字符串流,可以从字符串中提取数据。

    std::ostringstream:输出字符串流,可以将数据插入到字符串中。

    std::stringstream:输入/输出字符串流,既可以提取也可以插入数据。

4、流的操作

流支持多种操作来读取和写入不同类型的变量,如整数、浮点数、字符串等。

以下是一些常见的操作:

    >>:提取运算符,用于从流中读取数据。

    <<:插入运算符,用于向流中写入数据。

    .get() 和 .getline():用于读取单个字符或一行文本。

    .put():用于写入单个字符。

    .read() 和 .write():用于读写一定数量的字节。

    .eof():检查是否到达了流的末尾。

    .good()、.bad()、.fail() 和 .eof():检查流的状态。

以下是一个简单的例子,展示了如何使用cin和cout进行基本的交互:

#include <iostream>

int main()

{

    int a, b;

    std::cout << "Enter two numbers: ";

    std::cin >> a >> b;

    std::cout << "The sum is: " << a + b << std::endl;

    return 0;

}

在这个例子中,首先定义了两个整数a和b,然后通过std::cin从用户那里读取两个数字,并将它们存储在a和b中。接着,计算这两个数字的和,并使用std::cout将结果输出到屏幕上。

5、总结

 1、当从流中提取数据时,如果遇到非法输入或者格式不匹配的情况,流会进入一种称为“失败”(failed)的状态,后续的读取操作可能会受到影响。为了处理这种情况,可以使用clear()函数清除流的状态标志,并使用ignore()函数跳过导致错误的数据。

 2、在读取或写入之前,最好检查流的状态,以确保流已经正确地打开了。这可以通过调用.is_open()方法来完成。

 3、对于文件流,记得在使用完毕后关闭文件,否则可能会导致数据丢失或资源泄漏。

 

相关推荐

  1. C++ 小结

    2023-12-14 14:50:03       54 阅读
  2. C++入门小结

    2023-12-14 14:50:03       27 阅读
  3. <span style='color:red;'>C</span>---<span style='color:red;'>流</span>

    C---

    2023-12-14 14:50:03      31 阅读
  4. 【WPF+C# 项目开发软件的小结

    2023-12-14 14:50:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 14:50:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 14:50:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 14:50:03       87 阅读
  4. Python语言-面向对象

    2023-12-14 14:50:03       96 阅读

热门阅读

  1. 报错docker:permission denied

    2023-12-14 14:50:03       65 阅读
  2. 【已解决】No module named ‘sklearn‘

    2023-12-14 14:50:03       65 阅读
  3. HTTPS加密协议:保护你的网络安全

    2023-12-14 14:50:03       60 阅读
  4. LeetCode 每日一题 Day 11||贪心

    2023-12-14 14:50:03       61 阅读
  5. Android Kotlin Viewbinding封装

    2023-12-14 14:50:03       52 阅读
  6. android 逆向工程(待续)

    2023-12-14 14:50:03       59 阅读