• 学习 primer 第8章 IO库 小结


    iostream处理控制台IO

    fstream处理命名文件IO

    stringstream完成内存string的IO

    非常重要!!!!!!!!!!

     =============================================================================

    1  cin是一个istream对象  是从标准输入读取数据

    2  cout是一个ostream对象  是从标准输出写入数据

    3  cerr一个ostream对象 通常输出程序的错误消息   写入到标准错误

    4  >>运算符 是用来从一个istream对象读取输入数据 

    5  <<运算符 是用来从一个ostream对象写入输出数据

    6  getline函数  是从一个给定的istream 读取一行数据  存入一个给定的string对象中

                (插入讲下getline函数以及 << 运算符)

      使用getline(cin,line)读取一整行:line是一个string类型 , 有时候希望在最终的得到的字符串中 保留输入时候的空白符 这时应该用getline函数代替原来的>>运算符

    getline函数的参数是一个输入流和一个string对象 函数从输入流中读入内容 直到遇到换行符为止(注意换行符也被读进去了),然后将所有的内容存入到那个string对象中去(不存换行符)。getline只要一遇到换行符就结束读取操作并返回结果。

      和输入运算符一样  getline也返回他的流参数 因此既然输入运算符能作为判断条件 也就能用getline的结果作为条件

    例1:while(std::cin>>value)  //int   value

        while循环条件的求值就是执行表达式:std::cin >> value 此表达式从标准输入读取下一个数,保存在value中      输入运算符返回其左侧运算符对象,就是std::cin。实际就是检测std::cin。 当使用istream对象作为条件时,其效果就是检测流状态。 有效流 即未遇错误,检测ok。 当遇到文件结束 或遇到一个无效输入时例如读入的值不是一个整数),istream对象的状态会变为无效。无效状态的istream对象会使条件变为假。

       

    =============================================================================

    类fstream 和 stringstream都是继承自类iostream的。

    输入都是继承自istream 输出都是继承自ostream 。因此 可以在istream对象上执行的操作,也都可以在ifstream和istringstream对象上面执行 。继承自ostream的输出类也有类似情况!

    1 IO对象无拷贝或赋值(理解就好)书上p279

    2 一个流一旦发生错误 其后续的IO操作都会失败。只有一个流处于无错误状态 才可以从他读取数据 or写入数据

    3 while(cin >> i) 什么情况下循环会over? 文件over (linux中 ctrl+d(文件结束符))      2 I/O流错误     无效数据

    4 理解管理输出缓冲区刷新几种情况 注意(调试程序要及时刷新输出缓冲区 有利于定位bug)

    还有其他一些零碎的知识在看书吧!!!!!

                  最后一个demo  仔细读一读!

    #include<iostream>
    #include<fstream>
    #include<string>
    #include<vector>
    using namespace  std;
    
    int main(){
        ifstream in("data");//就是读取当前目录下面这个data文件了
        if(!in){    //这里就是要检测下流是否ok  好习惯
            cerr<<"do  not open inputfile"<<endl;
            return -1;
        }
    //====================================================================
        //添加一个  out输出对象 测试下看看    
        ofstream out("data1");
        if(!out){    //这里就是要检测下流是否ok  好习惯
            cerr<<"do  not open inputfile"<<endl;
            return -1;
        }
        out<<"zhangkele github zhangkele1221@163.com";
        //我们正常的cout<<" "; 是将" "内容定向到屏幕文件 这次定向到自己规定的文件里
        //这里运用了<<输出运算符号向out对象写入  ok明白意思了吧
        out.close();//好习惯  要关闭打开的流对象  除非局部的流对象他会自己析构掉
    //===========================================================================
        
        string line;
        vector<string> words;
        while(in>>line){//也是需要理解的 和下面的一样需要自己阅读primer书
        //while(getline(in,line)){//需要彻底的理解getline函数的原理
            words.push_back(line);
        }
        
        in.close();//好习惯  要关闭打开的流对象  除非是局部的流对象他会自己析构掉
        
        auto it  = words.begin();
        while(it!=words.end()){
            cout<<*it<<endl;
            ++it;
        }
        return 0;
    }

     

  • 相关阅读:
    归并、希尔排序
    堆排序
    [模板] 最小树形图/朱刘算法
    [模板] 常系数线性递推
    [模板] Kruskal算法 && 克鲁斯卡尔重构树
    [模板] 斯特林数,性质以及求法
    这几天想干什么
    奇怪的 Markdown / LaTeX 笔记
    [模板] 各种莫队
    [模板] 2-SAT 问题
  • 原文地址:https://www.cnblogs.com/zhangkele/p/7828681.html
Copyright © 2020-2023  润新知