字符串不会正确写入输出

时间:2013-11-23 23:18:08

标签: c++ string ofstream

我正在尝试写入一个文件,并且遇到了不写字符串的问题。

从我能够弄清楚的,我的字符串只会在我放置'\ 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;
    }

1 个答案:

答案 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());