【问题标题】:aligning output of ofstream对齐ofstream的输出
【发布时间】:2012-10-23 14:01:19
【问题描述】:

我希望将数据从我的程序输出到文本文件。这是一个工作示例,展示了我当前的操作方式,其中还包括日期/时间(我正在运行 Windows):

#include <iostream>
#include <fstream>
#include <time.h>

using namespace std;

int main()
{

char dateStr [9];
char timeStr [9];

_strdate(dateStr);
_strtime(timeStr);

ofstream output("info.txt", ios::out);
output << "Start time part 1 " << "\t" << timeStr << " on " << dateStr << "\n";
output << "Start time part 1000000 " << "\t" << timeStr << " on " << dateStr << "\n";
output.close();


return 0;
}

但是,作为用户,“info.txt”的输出对我来说不是很可读,因为末尾的时间和日期戳没有对齐。这是输出:

Start time part 1   15:55:43 on 10/23/12
Start time part 1000000     15:55:43 on 10/23/12

我的问题是,有没有办法对齐后半部分?

【问题讨论】:

    标签: c++ iostream fstream


    【解决方案1】:

    是的,&lt;iomanip&gt; 标头提供了setw 操纵器,可让您将输出的每个字段的宽度设置为ostream。对每一行使用setw 操纵器而不是制表符可以更严格地控​​制输出:

    output << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl;
    output << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl;
    

    要在左侧对齐字符串,请添加 left 操纵器:

    output << left << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl;
    output << left << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl;
    

    【讨论】:

    • 请注意:std::setw 仅适用于 next 插入,std::left 永久修改流。如果它是一个全局流,比如std::cout,一个行为良好的方法应该保存/恢复output.flags(),这样您的特定格式偏好就不会在程序的其他地方导致奇怪的结果。
    【解决方案2】:
    int max_align = 10;
    output << "Start time part 1 " << "\t" << timeStr 
    << std::string(max_align-timeStr.size(), " ") << " on " << dateStr << "\n";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多