stream不会追加换行符

时间:2014-02-28 12:35:28

标签: c++ io fstream

我在循环中调用函数write。我需要附加几行。

我通过了

std::fstream file(filename);

write(info, &file);

以下代码不附加换行符,或者至少Notepad ++不会显示它。(我只得到一个空格):

void IO::write(const std::string& name, std::iostream* stream)
{
    (*stream) << "usr" << name << " === " << "\n";
}

有什么问题?如何将新行附加到文本文件?

2 个答案:

答案 0 :(得分:3)

要详细说明我的相当严厉的评论,你的换行没有错,但是......

...使用正确的类型......

#include <iostream>
#include <fstream>

// ...
std::ofstream file( filename );
// ...

...如果您想将info打印到流中,只需执行此操作而不是通过某些功能...

// ...
file << "usr" << info << " === " << "\n";
// ...

...如果你真的希望使其成为一个功能,至少使用引用和正确的类型......

void IO::write( std::ostream & stream, const std::string & name )
{
    stream << "usr" << name << " === \n";
}

// ...
IO::write( file, info );
// ...

...但是在C ++中执行输出的“传统”方法是重载所讨论的类的operator<<,并且让打印实例的实现与类成员实现一起坐而不是去通过C风格的功能......

class MyClass
{
    // ...
    friend std::ostream & operator<<( std::ostream & stream, const MyClass & obj );
    // ...
};

std::ostream & operator<<( std::ostream & stream, const MyClass & obj )
{
    stream << "usr" << obj.name << " ===\n";
    return stream;
}

// ...
MyClass mine;
file << "Hello\n" << mine << 42 << "\n";

答案 1 :(得分:0)

我还建议您使用std :: endl而不是“\ n”。 std :: endl刷新文件,“\ n”没有。

刷新文件后(使用std :: endl或关闭文件)。尝试使用不同的编辑器,但应该可以看到行尾。