【问题标题】:C++ Printing Vector Adding New LineC++ 打印矢量添加新行
【发布时间】:2013-10-10 03:02:15
【问题描述】:

我有一个结构向量。

struct myStruct{
string text;
int num;
};

vector<myStruct> foo;

我正在尝试打印文本,后跟一个空格,然后是数字。像这样:

foobar 5

但是当尝试使用

打印我的矢量时
ofstream outputFile;
outputFile.open ("file.txt");

for(int i = 0; i < foo.size(); i++) {
        outputFile << foo[x].text << " " << foo[x].num << endl;
    }

打印出来的样子

foobar  
 5 
moretext  
 8

带有额外的换行符和空格。我不知道如何摆脱它并将其打印在同一行。有什么建议吗?

【问题讨论】:

  • 您是否检查过foo[x].text 的末尾是否有换行符?
  • @Mark Garcia 我正在使用 getline(input, foo.text)。所以它应该丢弃换行符,不是吗?
  • 它似乎也适用于 cout,只是不适用于我的输出文件......

标签: c++ vector ostream


【解决方案1】:

您可以检查 foo[x].text 是否包含 \r 或 \n。

【讨论】:

  • 它没有。我已经检查过了。
【解决方案2】:

“我正在使用 getline(input, foo.text)。所以它应该丢弃换行符”

std::getline() 在末尾添加一个回车符,如果您的 input 流具有 windows 样式的换行符 (CRLF),并且您正在使用具有 LF 的 unix 上的程序

你需要修剪它,使用类似的东西:

foo.text.erase(foo.text.find_last_not_of("\n\r")+1);

【讨论】:

  • 使用此代码仍然没有运气。使用 cout 可以正常工作,但使用输出文件会中断
【解决方案3】:

一个技巧是在将字符串传递给 outputFile 之前合并字符串。

您是否尝试过使用 open() 方法设置模式? 例如

outputFile.open("file.txt", std::ofstream::out | std::ofstream::app);

【讨论】:

  • 我会试试这个。此外,除非您想在每一行之后刷新文件,否则无需使用“endl”。否则请使用 '\n'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多