• C++之I/0流操作(标准流、文件流、二进制操作等)


    流(stream)为C++的输入输出操作提供了许多的便利,通常我们使用的流是std::out用于输出,使用std::cin用于接收用户的输入,除此之外,C++还提供了文件流用于实现文件的读写操作,字符串流用于进行字符串的操作。

    标准输入输出

    头文件:#include<iostream>
    返回值:是流对象,可以当bool类型使用
    函数:按行读取 getline(流对象, string对象

    //标准输入输出
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
     
        string str;
        cin >> str;//按空格换行符tab键分割
        cout << str << endl;
        while (getline(cin, str))//返回值为流对象,可以当作bool类型使用
        {
            if (0 == str.compare("quit"))//或者"quit" == str
            {
                break;
            }
            cout << str << endl;
        }
        cout << "退出成功!" << endl;
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    文本文件输入输出

    头文件:#include<fstream>

    文件类型

    • 文本文件:文件以文本中的ASCII码形式存储在计算机中
    • 二进制文件:文件以文本中的二进制形式存储在计算机中,用户一般不能直接读懂

    文件打开方式

    打开方式解释
    ios::in为读文件而打开文件
    ios::out为写文件而打开文件
    ios::ate初始位置:文件尾
    ios::app追加方式写文件
    ios::trunc如果文件存在先删除,再创建
    ios::binary二进制方式

    注意:文件打开方式可以配合使用,利用|操作符
    例如:用二进制写文件 ios::binary | ios::out

    写文件

    写文件步骤:
    方法一:

    1. 头文件 #include
    2. 创建流对象 ofstream ofs;
    3. 打开文件 ofs.open(“文件路径”,打开方式);
    4. 打开文件并判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
    5. 写数据 ofs<<“写入的数据”;
    6. 关闭文件 ofs.close();

    方法二:创建流对象并打开文件:ofstream ofs(“文件路径”, 打开方式);

    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
        ofstream ofs;
        ofs.open("1.txt", ios::out);//以文本写模式打开或者创建文件
        //方式二  ofstream ofs("1.txt", ios::out);创建流对象并且打开文件
        
        if (!ofs.is_open())//判断是否打开成功 true-成功 false-失败
        {
            cout << "创建或者打开文件失败" << endl;
        }
        ofs << "写入数据" << endl;
        ofs.close();
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    读文件

    读文件步骤:

    1. 头文件 #include
    2. 创建流对象 ifstream ifs;
    3. 打开文件 ifs.open(“文件路径”,打开方式);
    4. 判断文件是否正确打开 ifs.open(“文件路径”,打开方式);
    5. 读数据 四种方式读取
    6. 关闭文件 ofs.close();
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    int main()
    {
        ifstream ifs;
        ifs.open("1.txt", ios::in);//以文本读方式打开文件
        if (!ifs.is_open())
        {
            cout << "打开文件失败" << endl;
        }
     
        //方法一
        string buffer;
        while (ifs >> buffer) //读的数据以空格换行符tab分隔
        {
            cout << buffer << endl;
        }
     
     
        //方法二
        while (getline(ifs, buffer))//以行的形式读取
        {
            cout << buffer << endl;
        }
        
        //方法三
        char c;
        while ((c = ifs.get()) != EOF)//一次读取一个字符,读到EOF停止
        {
            cout << c;
        }
     
        //方法四
        char b3[100] = { 0 };
        while (ifs.getline(b3, 100)) //一次读取100个字节
        {
            cout << b3 << endl;
        }
        ifs.close();//关闭文件
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    二进制文本输入输出

    写文件

    二进制写文件主要利用流对象成员函数write
    函数原型:ostream& write(const char * buffer, int len);
    第一个参数:字符指针buffer指向内存中的一段空间
    第二个参数:读写的字节数
    在这里插入图片描述

    读文件

    二进制读文件主要利用流对象成员函数read
    函数原型:istream& read(char * buffer, int len);
    第一个参数:字符指针buffer指向内存中的一段空间
    第二个参数:读写的字节数
    在这里插入图片描述

    字符串输入输出

    头文件:#include<sstream>

    往流里面输出

    #include <sstream>
    #include <iostream>
    using namespace std;
    int main()
    {
        ostringstream s;
        s << 10;
        cout << s.str() << endl;//无参 打印
        s.str("");//给空字符串   清空
        s << 5.9;
        cout << s.str() << endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    从流里面读出

    int main()
    {
        //如果这个字符串严格按照空格(空白字符)分隔就可以获取
        istringstream stream("10 20 nihao");
        int a;
        int b;
        string str;
        stream >> a >> b >> str;
        cout << a << "\t" << b << "\t" << str << endl;
        return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    格式控制

    头文件:#include
    可直接查表

    #include <iomanip>//格式控制头文件
    int main()
    {
        cout << setiosflags(ios::right) << setw(7) << 1 << endl;//设置宽度为7,右对齐
        cout << resetiosflags(ios::right);//取消对齐方式
        cout << setfill('.') << setw(30) << endl;//宽度设置为30,填充'.'输出
        cout << setfill(' ');//恢复填充为空格
        cout << setiosflags(ios::showpos) << 1 << endl;//强制在正数前加+
        cout << resetiosflags(ios::showpos);//取消强制正数前加+
        cout << setiosflags(ios::showpoint) << 1.2 << endl;//强制显示小数点后的无效0
        cout << resetiosflags(ios::showpoint);//取消强制显示小数点后的无效0
        cout << setiosflags(ios::scientific);//科学计数法
        cout << resetiosflags(ios::scientific);//取消科学记数法
        cout << setprecision(18);//精度为18,正常为16
        cout << setprecision(6);//恢复为6
     
        cout << oct << 15;//输出为八进制数
        cout << hex << 20;//输出为十六进制数
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    Java中关于StringBuffer和StringBuilder的使用
    BIM分享 | 建筑BIM应用中,那些有趣的事
    AWS认证SAA-C03每日一题
    分类预测 | Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入分类预测
    MongoDB ObjectId() 是如何实现的 “千万级” 分布式唯一 ID?
    智能告警:如何通过监控易实现精准故障预警与快速定位
    【测试工具系列】压测用Jmeter还是LoadRunner?还是其他?
    浅析泵站自动化技术的发展趋势
    Failed to start mysql.service Unit not found
    Java基础- StringBuilder & StringBuffer
  • 原文地址:https://blog.csdn.net/qq_45254369/article/details/125510011