我正在尝试写入一个文件,并且遇到了不写字符串的问题。
从我能够弄清楚的,我的字符串只会在我放置'\ n'之后打印。问题是我正在尝试将其写入文件,并且必须与其他信息一致。
我试图让我的文件看起来像的样本:
1111 Last, First 10 20 $30.00
它实际写的内容:
1111 10 20 $30.00
这是我尝试过的,它只会打印最后3项。如果我在 getName()之后放置'\ n',那么它会打印一切正常:
ofstream outputFile("somefile.txt");
outputFile << std::setw(10) << getAccount()
<< std::setw(10) << getName() // returns a string
<< std::setw(10) << getNum1()
<< std::setw(10) << getNum2()
<< std::setw(10) << getTotal() << endl;
我试过在 getName()之后调用flush但是它不起作用
outputFile.flush()
我应该分别存储姓氏和名字。
string getName() const
{
string full = last + ", " + first;
return full;
}
答案 0 :(得分:1)
我假设你实际上为输出文件指定了一个名称,例如
std::ofstream outputFile("some-file.txt");
假设已对此进行排序,请查看std::setw(n)
中的<iomanip>
,并确保输出以某种方式分开。例如,您可能想要使用
outputFile << std::setw(8) << getAccount() << ' '
<< std::setw(20) << getName() << ' '
<< std::setw(6) << getNum1() << ' '
<< std::setw(6) << getNum2() << ' '
<< getTotal() << '\n';
...如果你真的想确保输出立即写入文件而不是缓冲:
outputFile << std::flush;
(相当于std::outputFile.flush();
,但使用了可靠的语法)。
根据上面提到的评论,我会猜测你最后得到的名字在最后包含'\r'
:这样,它看起来好像什么都没有,但实际上是字符只会被后来的人物覆盖。您可以使用
str.erase(std::remove(str.begin(), str.end(), '\r'), str.end());