c++IO操作<2>

来源:互联网 发布:数据分析岗位认识 编辑:程序博客网 时间:2024/05/17 06:44
/*    下面几种情况导致缓冲区里的内容被刷新:    (1) 程序正常结束。    (2) 缓冲区满。    (3) 用操作符显示刷新缓冲区,例如行结束符endl    (4) 在每次输出操作执行完后,用unitbuf操作符设置流的内部状态,从而清空缓冲区    (5) 将输入流和输出流关联起来。在这种情况下,在读输入流时将刷新其关联的输出缓冲区    这里要注意一点,如果我们运行程序崩溃了,输出缓冲区是不会被刷新的。*/#include <iostream>using namespace std;/*int main(){      cout<<"hi";      cout<<"hello";      int i= 0;      cin >> i;     while(1);/* 如果你将cin>>i;这条语句删除,不打印任何东西。 加上这条语句,则能打印。这是因为标准库将cout与cin绑在一起的。 当绑在一起时。任何读输入流的尝试都将首先刷新输出流关联的缓冲区。}*/
 
int main(){    cout<<"hi";    int i = 0;    ostream *old_tie = cin.tie();//得到以前绑定的流的指针。    //tie函数可用istream,ostream对象调用,使用一个指向ostream对象的指针形参    cin.tie(&cout);    cin.tie(0);//书上说如果在调用tie函数时传递实参0,则打破该流上的已存在的捆绑。这里并没有打破。在进行cin操作时,还是刷新了输出流缓冲区。打印了hi。    cin>>i;    while(1);}

int main(){    cout<<"hi"<<flush;  //刷新缓冲区,但是输出中不添加任何字符。    cout<<"hi"<<ends;    //书上说:ends,这个操作符在缓冲区中插入空字符null,然后刷新它。                        //我在ubuntu上测试,根本就没有刷新缓冲区,用ends。    cout<<"hi"<<endl;   //插入一个换行符,然后刷新缓冲区。    cout<<"hi";    cout << unitbuf <<"first"<<"second"<<nounitbuf;    /*unitbuf 这个操作符在执行完后写操作后,都刷新流。      nounitbuf操作符将流恢复为使用正常的,由系统管理的缓冲区刷新方式。    */    while(1);    /*        输出结果:            hihihi            hifirstsecond    */}


原创粉丝点击