第8章 IO库

由于不能拷贝IO对象,因此函数通常以引用方式传递和返回流。

练习8.1:编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直到遇到文件结束标识时停止。它将读取的数据打印在标准输出上,完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态

#include 
#include 

using namespace std;

std::istream& read(std::istream &is)
{
    string temp;
    while (is >> temp)
    {
        cout << temp << " ";
    }
    cout << endl;
    is.clear();  //如果没有clear则在读入一个结束符后不会执行while语句
    return is;
}
int main()
{
    while (read(cin))
    {
        cout << endl << 1;
        break;
    }
    
    return 0;
}

输出缓冲
缓冲刷新

  • 程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行。
  • 缓冲区满的时候
  • 使用操纵符endl
  • 使用unitbuf设置流的内部状态
  • 一个输出流被关联到另一个流

练习8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中

#include 
#include 
#include 

using namespace std;

void get(std::ifstream &is, vector &temp);

int main()
{
    vector a;
    string t;
    ifstream in("1.txt");
    get(in, a);

    for (auto i : a)
        cout << i << endl;

    return 0;
}

void get(std::ifstream &is, vector &temp)
{
    string str;
    if (is)
    {
        while (is >> str) //第一题getline(is, str)
        {
            temp.push_back(str);
        }
    }
    

}

image.png
  • 只可以对ofstream或fstream对象设定out模式。
  • 只可以对ifstream或fstream对象设定in模式
  • 只有当out也被设定是才可设定trunc模式
  • 只有trunc没被设定,就可以设定app模式。在app模式下,即使没有显试指定out模式,文件也总以输出方式被打开
  • 默认情况下,即使我们没有指定trunc,以out模式打开的文件也会被截断。

保留被ofstream打开的文件中已有数据的唯一方法是显式指定app或in模式

练习 8.9:使用istringstream对象读取打印内容

#include 
#include 
#include 
#include 

using namespace std;

std::istream& read(std::istream &is)
{
    string temp;
    while (is >> temp)
    {
        cout << temp << " ";
    }
    cout << endl;
    is.clear();  //如果没有clear则在读入一个结束符后不会执行while语句
    return is;
}
int main()
{
    string a = "adfdsfgasdf asdf adsadsg ads";
    istringstream record(a);
    read(record);
    return 0;
}


你可能感兴趣的:(第8章 IO库)