【问题标题】:How to remove extra space created when using setw in C++?如何删除在 C++ 中使用 setw 时创建的额外空间?
【发布时间】:2019-10-01 23:44:53
【问题描述】:

我正在尝试使用 setw 格式化文件的输出,但没有成功。我知道我的输出会根据它之前的变量的字符长度而变化,但是我不知道如何更改我的代码,以便每一行都将独立于它之前的行打印。 (请看图片链接)

由于“游泳”一词比所有其他词类型都长,这会改变这些列的信息,使报告看起来很糟糕。此外,“金额”列中的逗号似乎也在改变输出。

fout    << s.getID() 
        << right << setw(11) << addCommas(s.getAmount()) << "\t"
        << left << setw(14) << s.getType() << "\t"
        << left << setw(14) << s.getLength() << "\t"
        << left << setw(10) << s.getDate() << "           "
        << left << setw(15) << s.getFname() << "\t"
        << s.getLname() << endl;
lineCount++;

Current Program Output

(目前正在处理这些 setw 值,因此请忽略它们目前不与标题对齐)

编辑:将我在 VS 中的字体更改为 Helvetica,因为 Consolas 伤害了我的眼睛,这也影响了我的 .dat 的输出,所以基本上这不是问题。哎呀。

【问题讨论】:

  • 要么为最坏的情况设置宽度,要么为数据集计算最坏的情况,额外通过数据集。

标签: c++ formatting format output alignment


【解决方案1】:

如果您将 std::internal 添加到您的 std::cout 语句中,它会将剩余的空间抽出,然后您可以创建一个新的 setw。这可能比制表符更适合您,尤其是在您不使用等宽字体的情况下。请参阅this answer. 中的示例确保您的setw 足够大以容纳您最大的单词......并且不要这样做using namespace std,这是不好的做法。你太无耻了! ;)

【讨论】:

  • 非常感谢尼克!当您提到字体时,我深入研究了您的问题,这就是确切的问题。你现在看不到它,但我的手肯定在我的手掌中......
  • 不客气!如果它解决了您的问题,请记住接受答案。祝你好运,欢迎来到 StackOverflow!
  • 抱歉,这个网站非常新。我已经接受了答案。感谢您的帮助!
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多