【问题标题】:fstream and setw not aligning output properlyfstream 和 setw 未正确对齐输出
【发布时间】:2015-10-01 06:30:38
【问题描述】:

setw 似乎没有为我调整这里的内容,我不知道为什么会这样。插入\t 确实会将事情推向右侧,但我希望对输出的格式进行更严格的控制。有什么想法吗?

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main() {

    string name = "Name LastName";
    int age = 27;
    double milesRun = 15.5;

    ofstream outFile;
    outFile.open("text.txt");

    outFile << "Person's name: " << name << setw(12) << "Person's age: " << age << setw(12) << "Miles run: " << milesRun << endl;

    outFile.close();

    return 0;
}

【问题讨论】:

  • setw 设置下一个输出的(最小)宽度。它不考虑更早的字段。
  • 想象一下使用它就像你正在构建一个表格并使用setw 来定义单元格大小。在尝试实现您的目标时,我通常也会使用left。

标签: c++ fstream iomanip setw


【解决方案1】:

请记住,当使用setw 时,该函数用于声明关于 出现的区域。因此,您可以使用它来声明静态值,例如 "Person's Name:" 等信息中的文本,方法是计算字符并将其用作您的值(通常为 +1 或 2)。以此为例,该值将是 setw(16) 以说明每个字符 + 2 个空格。然后你应用另一个setw 值来声明即将到来的字段,选择一个足够大的值来容纳你的数据。请记住对齐left,这样您就可以看到这对您的输出有何影响。在您的示例中,您正确对齐,虽然在某些示例中这可能会提供格式化输出,但正如您所见,它在其他示例中会中断。


如果您希望每个数据集之间有更多空间,则只需像this 示例中那样增加字段的宽度。这样,所有内容都左对齐,您不需要标签。

【讨论】:

  • 感谢您通过示例为我澄清这一点,现在它更有意义了。我已经更新了我的示例here,它可以运行了。 setw 现在正在工作,但我仍然缺少对齐中的一些小东西。你介意快速浏览一下并告诉我吗? @badfilms @Bo Persson
  • 所以基本上,正如 Bo Persson 指出的那样,setw 设置了 最小 宽度。就您而言,由于 George Clooney 名字的长度,您超出了最小值。您可以 a) 增加宽度值,或 b) 限制数据的长度。
  • 非常感谢您对示例和解释如此透彻。完全回答了我不明白的地方。竖起大拇指。
猜你喜欢
  • 2022-08-15
  • 2016-02-25
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多