• IO流


    第八章、IO流

    1.IO类型:

    注意IO对象不能赋值、初始化、拷贝。
    Iostream Istream ostream iostream
    Fstream Ifstream ofstream sstream
    Sstream Istringstream ostringstream stringstream
    继承体系:
    image


    2.IO条件状态:

    判断IO的具体错误状态 strm::iostate iostate是一种IO类型,表示完整的IO状态。

    1)IO状态标志位:

    Strm::badbit 流崩溃,表示不可恢复错误,流无法使用了。
    Strm::failbit 流错误,可恢复错误,比如类型不匹配(int =char),流可以继续使用。
    Strm::eofbit 文件结束
    Strm::goodbit 未出错

    2)IO状态函数:

    s.fail() failbit 或badbit置位则返回true
    s.bad() badbit状态
    s.good() 流状态是否正常
    s.clear() 重置流状态(比如在读到文件/字符串结尾时,若想要再次使用该流对象,需要对其failbit等状态位重置)
    s.clear(state) 重置指定的状态 (state为iostate类型),比如只重置 failbit而不重置badbit cin.clear(cin.rdstate()&~cin.failbit)
    s.setstate(state) 设定流状态
    s.rdstate() 获得当前状态

    3.输出流缓冲:

    每个输出流都有一个缓冲区;
    刷新缓冲的几种情况:

    • 程序正常结束;
    • 使用endl,flush等强制刷新
    • 设置流内部状态,cout<<unitbuf;则接下来的cout输出流均为每次强制刷新,cout<<nounitbuf;则恢复正常状态;
    • 关联输入输出流,这样在调用输入时即强制刷新输出流;(cin cout已经默认绑定)通过tie函数绑定,例如cin.tie(&cerr);
    4.文件I/O

    1)头文件:<fstream>
    2)类型:ifstream ofstream fstream
    3)操作:

    • fstream fstrm;
    • fstream fstrm(filename)
    • fstream fstrm(filename,mode) 可选参数为文件名和打开模式;
    • fstrm.open(filename,mode) 可选参数为mode打开模式;
    • fstrm.close(); 若不调用其实语句块结束也自动析构。
    • fstrm.is_open()文件是否打开;

    4)文件模式:

    • In:读方式打开(ifstream 默认)
    • Out:写方式(ofstream 默认)
    • App:附加写
    • Ate:定位文件末尾
    • Trunc:截断文件(ofstream 默认)
    • binary:二进制IO

    5.string流
    1)头文件:<stringstream>
    2)类型:
    ostringstream
    istringstream
    stringstream
    3)操作:

    • strm.str()返回保存string的拷贝(返回string流中保存的string对象)
    • strm.str(s)将s拷贝到strm中
    • Strm.clear() 流结束时候触发failbit等标志位,若想再次使用需要重置。
    • Strm.str("")

    4)应用:
    1)stringstream常常可以用来进行类型转换;
    例1:

    点击查看代码
    int convert(string& t)
    {
        stringstream stream;
        stream << t;
        int result;
        stream >> result;
        return result;
    }
    int main()
    {
       string str = "12";
       int num;
       num = convert(str);
       cout << num;
       return 0;
    }
    

    2)字符串分割,C++中没有split
    例2:

    点击查看代码
    int main(int argc, char *argv[])
    {
        string sen;
        string word;
        getline(cin, sen);
        stringstream s;
        s.str(sen);
        while(s>>word)
        {
            cout << word << " ";
        }
    
        return 0;
    }
    
  • 相关阅读:
    Spring总结四:IOC和DI 注解方式
    Spring总结二:IOC(控制反转)xml方式
    Spring总结一:Srping快速入门
    TCP UDP HTTP 的关系和区别
    sql 一些偶尔会用到的写法和函数 不定时更新
    AngularJS分层开发
    AngularJS入门
    url和uri的区别
    MyBatis总结八:缓存介绍(一级缓存,二级缓存)
    Javascript 中 == 与=== 对比
  • 原文地址:https://www.cnblogs.com/wmzclever/p/15985877.html
Copyright © 2020-2023  润新知