我应该在哪里使用iostream类?

时间:2010-12-29 11:45:01

标签: c++ stream iostream

正如我们在C ++中所知,我们有类iostream,它继承自istream(basic_istream)和ostream(basic_ostream)。在您可以找到的每本C ++书中,使用iostream类对象,您可以读取和写入相同的流。但我真的没有看到任何解释或例子来理解为什么我应该使用这样一个奇怪的想法。我真的不知道为什么我需要写一些流而不是从它读取:(。

当我需要这样的建筑时,你能解释一下吗?我认为必须有使用这种结构的严重理由(不要忘记只有iostream声明我们使用虚拟继承和多重继承)。

此外,当我尝试编写一个简单的代码,即使用fsteram(iostream的衍生物)时,我发现它不能正常工作,我希望如此。这是我的代码:

#include <fstream>
using namespace std;
int  main()
{
    fstream fstr("somefile.txt",fstream::in|fstream::out);//fstream is deriveted from iosteram
    int n;
    fstr>>n;//reading n (WORKS FINE !!!).

    fstr.flush();

    //trying to print Hello to the same file
    fstr<<"Hello"<<endl;// NOT WORKING!!!!!!!

    fstr.flush();

    return 0;
}

那么你能告诉我为什么这段代码可以从文件中读取而且不能写一些东西????

恢复: 请告诉我为什么我们需要类iosteram以及为什么isteram和ostream没有使用以及如何使用它。

感谢并抱歉我的英语:)。

P.S。可能这个问题是原始的,但请回答我。

编辑:我的代码现在正在运行。感谢Murka。

4 个答案:

答案 0 :(得分:4)

IIRC你需要先做一个寻求才能写,不要问为什么。 还添加了代码以清除它可能引发的任何标志。

#include <fstream>
using namespace std;
int  main()
{
    fstream fstr("somefile.txt",fstream::in|fstream::out);//fstream is deriveted from iosteram
    int n;
    fstr>>n;//reading n (WORKS FINE !!!).

    fstr.clear();     //Clear any errors, eof, etc.
    fstr.seekg(0, ios::beg);  //Seek to beginning of file
    fstr.flush();

    //trying to print Hello to the same file
    fstr<<"Hello"<<endl;// NOW WORKS!!!

    fstr.flush();

    return 0;
}

答案 1 :(得分:2)

  

为什么我需要能力阅读和   同时写入文件?

您可能需要更新或编辑现有文件的程序的能力:它必须读取已存在的内容,找到要更新或编辑的部分,并且必须编写更新(改变文件。

答案 2 :(得分:1)

您可能希望读取和写入相同的流,因为流执行类型转换,如std :: stringstream。您还可以对允许读取和写入的数据源进行iostream抽象,例如套接字或内存缓冲区。

答案 3 :(得分:0)

  

何时我需要这样的建筑

很少。在这里看到我的答案: https://stackoverflow.com/questions/4517299/is-fstream-better-than-iostream-in-c/4517883#4517883

编辑: 如果您认为不需要它,则不需要它。