【C++】IO流

在这里插入图片描述

上期回顾: 【C++】lambda表达式
个人主页:C_GUIQU
归属专栏:C++

在这里插入图片描述

正文

1. 简介

在C++编程中,IO流是一个非常重要的概念。它提供了一种统一的方式来处理输入和输出操作,无论是从控制台、文件还是其他输入输出设备。IO流使得数据的传输更加方便和灵活,是C++程序与外界交互的关键机制。

2. IO流的基本类型

2.1 输入流(istream)

输入流主要用于从外部源读取数据到程序中。在C++中,std::cin是标准输入流的一个典型例子,它允许用户从控制台输入数据。例如:

#include <iostream>

int main() {
    int num;
    std::cout << "请输入一个整数: ";
    std::cin >> num;
    std::cout << "你输入的整数是: " << num << std::endl;
    return 0;
}

这里std::cin从用户那里获取输入并将其存储到变量num中。

2.2 输出流(ostream)

输出流用于将程序中的数据输出到外部目标。std::cout是标准输出流,常用于向控制台输出信息。除了简单的文本输出,还可以输出各种数据类型的值。例如:

#include <iostream>

int main() {
    double pi = 3.1415926;
    std::cout << "圆周率的值约为: " << pi << std::endl;
    return 0;
}

此外,还有cerr用于输出错误信息,clog用于输出日志信息等。

2.3 输入输出流(iostream)

输入输出流结合了输入流和输出流的功能。fstream库中的fstream类就是一种典型的输入输出流,它可以用于对文件进行读写操作。例如:

#include <fstream>
#include <iostream>

int main() {
    std::fstream file("test.txt", std::ios::in | std::ios::out);
    if (file) {
        int data = 10;
        file << data;
        file.seekg(0);
        int readData;
        file >> readData;
        std::cout << "从文件中读取的数据: " << readData << std::endl;
        file.close();
    }
    return 0;
}

3. 格式化输入输出

3.1 输出流的格式化

输出流可以通过使用控制符来实现格式化输出。例如,std::setw()用于设置输出宽度,std::setprecision()用于设置浮点数的精度。

#include <iostream>
#include <iomanip>

int main() {
    double number = 123.456789;
    std::cout << std::setw(10) << std::setprecision(3) << number << std::endl;
    return 0;
}

这使得输出更加美观和符合特定的格式要求。

3.2 输入流的格式化

输入流也有一些格式化相关的操作,比如跳过空白字符等。不过,相对输出流的格式化,输入流的格式化使用场景稍少一些。

4. 文件流操作

4.1 文件的打开与关闭

在使用文件流时,首先要打开文件。可以使用open()函数或者在构造函数中指定文件名和打开模式。打开模式包括读模式(ios::in)、写模式(ios::out)、追加模式(ios::app)等。文件使用完毕后,要及时关闭,以释放资源。例如:

#include <fstream>

int main() {
    std::ofstream outFile("output.txt", std::ios::out);
    if (outFile) {
        outFile << "这是写入文件的内容" << std::endl;
        outFile.close();
    }
    return 0;
}

4.2 文件的读写操作

文件的读写操作根据是文本文件还是二进制文件有所不同。对于文本文件,可以像操作标准输入输出流一样使用<<>>运算符。对于二进制文件,则需要使用read()write()函数。例如:

#include <fstream>

int main() {
    std::ofstream binaryFile("binary.bin", std::ios::out | std::ios::binary);
    if (binaryFile) {
        int data = 255;
        binaryFile.write(reinterpret_cast<char*>(&data), sizeof(int));
        binaryFile.close();
    }
    return 0;
}

5. 字符串流(sstream)

5.1 从字符串中读取数据

字符串流允许我们将一个字符串当作输入流来处理。例如,可以将一个包含数字的字符串解析为相应的数值类型。

#include <sstream>
#include <iostream>

int main() {
    std::string str = "123 456";
    std::stringstream ss(str);
    int num1, num2;
    ss >> num1 >> num2;
    std::cout << "从字符串中解析出的数字: " << num1 << " 和 " << num2 << std::endl;
    return 0;
}

5.2 将数据写入字符串

也可以将数据写入字符串流,从而生成一个包含特定内容的字符串。

#include <sstream>
#include <iostream>

int main() {
    std::stringstream ss;
    int num = 789;
    ss << "这是一个数字: " << num;
    std::string result = ss.str();
    std::cout << result << std::endl;
    return 0;
}

6. 总结

C++的IO流提供了丰富的功能,涵盖了输入流、输出流、输入输出流、文件流和字符串流等多种类型。通过这些不同类型的流,可以方便地实现与用户、文件以及字符串之间的数据交互和处理。掌握IO流的各种操作,包括格式化输入输出、文件的打开关闭和读写以及字符串流的使用,对于编写高质量的C++程序至关重要,能够满足不同场景下的输入输出需求,增强程序的实用性和灵活性。

结语
感谢您的阅读!期待您的一键三连!欢迎指正!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guiat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值