【问题标题】:C++ ofstream output not indenting correctlyC++ ofstream 输出没有正确缩进
【发布时间】:2015-04-22 01:04:38
【问题描述】:

我正在将姓名和成绩输出到一个文件中,它需要采用特定格式。

我目前有这段代码要写入文件

void outToFile(Student a[], ofstream& b, int c){
  b << "Student Grade Summary\n";
  b << "---------------------\n\n";
  b << "ENGLISH CLASS\n\n";
  b << "Student Name\t\t" << "Test Avg\n";
  b << "------------------------------------------------\n";
  for(int i = 0; i < c; ++i){
    if(a[i].course == "E"){
        b << a[i].first << " " << a[i].last << "\t\t" << a[i].avg << "\t";
        if(a[i].avg >= 90)
            b << "A\n";
        else if(a[i].avg >= 80)
            b << "B\n";
        else if(a[i].avg >= 70)
            b << "C\n";
        else if(a[i].avg >= 60)
            b << "D\n";
        else if (a[i].avg < 60)
            b << "F\n";
        else
            b << "\n";
    }
  }
}

将其写入 txt 文件

Student Grade Summary
---------------------

ENGLISH CLASS

Student Name        Test Avg
------------------------------------------------
Marvin Dipwart      86.5    B
Axelrod Polinski        61.9    D
James T. Kirk       79.6    C

如您所见,缩进是错误的,我需要将其全部对齐。 我该如何解决这个问题?

【问题讨论】:

  • 那是因为第二个名字更长。简单地添加固定数量的标签不会使其对齐。你真的应该使用不同的输出格式,例如CSV,或者使列固定宽度并带有空格进行填充。

标签: c++ file-io ofstream


【解决方案1】:

您想连接名字和姓氏,并指定组合的宽度,如下所示:

b << std::setw(30) << (a[i].first + " " + a[i].last) << "\t" << a[i].avg;

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-08-21
    • 2021-11-12
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多