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

来源:互联网 发布:ubuntu开启samba服务 编辑:程序博客网 时间:2024/06/05 20:52

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》