cpp: ostream setf() 设置格式状态方法的初使用

本文介绍了一个C++程序示例,展示了如何使用osstream的setf、width和precision等方法来格式化输出到控制台和文件。通过具体代码实现了不同格式的数据展示,如整数、浮点数的输出格式调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

osstreamsetf(iso_base::fmtflags) , width(n) , precision(n)是用来设置格式状态的。这种格式状态,可以体现在控制台输出,也可以体现在文件中。(多态)

下面是一个示例程序,显示了这些格式化方法的使用示例。

#include <iostream>
#include <fstream>

using namespace std;

void file_it(ostream &os, double fo, const double fe[], int n);

const int LIMIT = 5;

int main() {

    ofstream fout;
    const char *fn = "ep-data.txt";
    fout.open(fn);
    if (!fout.is_open()) {
        cout << "Can't open " << fn << ". Bye\n";
        exit(EXIT_FAILURE);
    }
    double objective;
    cout << "Enter the focal length of your "
            "telescope objective in mm: ";
    cin >> objective;
    double eps[LIMIT];

    cout << "Enter the focal length,in mm of " << LIMIT
         << " eyepieces:\n";
    for (int i = 0; i < LIMIT; ++i) {
        cout << "Eyepiece #" << (i + 1) << " : ";
        cin >> eps[i];
    }
    file_it(fout, objective, eps, LIMIT);
    file_it(cout, objective, eps, LIMIT);
    fout.close();
    return 0;
}

void file_it(ostream &os, double fo, const double fe[], int n) {
    ios_base::fmtflags initial;
    // set current and save prev format
    initial = os.setf(ios_base::fixed);
    os.precision(0); // 设置小数点后的长度为0
    os << "Focal length of objective: " << fo << " mm\n";
    os.setf(ios_base::showpoint);
    os.precision(1); // 设置小数点后的长度为1
    os.width(12); // 设置字段宽度
    os << "f.l. eyepiece";
    os.width(15);
    os << "magnification" << endl;
    for (int i = 0; i < n; ++i) {
        os.width(12);
        os << fe[i];
        os.width(15);
        os << int(fo / fe[i] + 0.5) << endl;
    }

    os.setf(initial); // reset to prev format
}

其中:

  • file_it(fout, objective, eps, LIMIT);将格式化数据写入文件中;
  • file_it(cout, objective, eps, LIMIT);将格式化数据显示在控制台上。

输出示例:(粗体是输入)
Enter the focal length of your telescope objective in mm: 1800
Enter the focal length,in mm of 5 eyepieces:
Eyepiece #1 : 19
Eyepiece #2 : 30
Eyepiece #3 : 14
Eyepiece #4 : 8.8
Eyepiece #5 : 7.5
Focal length of objective: 1800 mm
f.l. eyepiece magnification
19.0 95
30.0 60
14.0 129
8.8 205
7.5 240

Process finished with exit code 0

此时,文件ep-data.txt中的内容为(最后一行是空行):

Focal length of objective: 1800 mm
f.l. eyepiece magnification
19.0 95
30.0 60
14.0 129
8.8 205
7.5 240

ps: 以上内容来自《c++ primer plus》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值