C++流IO工具

写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!

相关文章:
[C++系列]小白的C++入门教程
C++流和文件IO
C++字符IO


一、用流函数格式化输出

对程序输出的布局进行调整称为对输出进行格式化
在C++中,可以用一些命令来控制格式。这些命令可指定大量格式细节。
例如:

cout.seft(ios::fixed);
cout.seft(ios::showpoint);
cout.precision(2);

这段代码可以控制小数位数为两位。

每个输出流都有名为precision的成员函数.程序一旦为ostream流执行了precision调用,从此以后,向那个流输出带小数点的任何数字时,都是保留两位有效数字。
precision函数调用只对调用指定的流生效。
setf是set flag(设置标志的缩写)。标志(flag)作为setf的实参,该标志就会以特定的方式去输出写入那个流。
ios::fixed标志导致流采用
定点计数法
,一旦采用该标志,输出到那个流中的所有浮点数就会采用日常生活中采用的常规方法来写入,而不是e计数法。
ios::showpoint标志规定流总是在浮点数类型中包含小数点,如果准备输出2.0,就肯定是2.0,而不是2。

另一个有用的标志是ios::showps,为流设置该标志,就会为输入到那个流的正数添加正号。

标志含义
ios::fixed如果设置这个标志,就不用e计数法写浮点数(使用该标志会自动取消ios::scientific标志)
ios::scientific设置该标志会用e计数法写浮点数(使用该标志自动取消ios::fixed标志)
ios::showpoint设置该标志,始终为浮点数显示小数点和尾随的0,如果没有设置,则一个数字在小数点后全是0
ios::showpos设置该标志,正整数前面会输出一个正号
ios::right设置该标志,会调用width函数指定域宽,并指定右对齐(自动取消ios::left)
ios::left设置该标志,会调用width函数指定域宽,并指定左对齐(自动取消ios::right)

任何的标志都可以使用unsetf函数取消,例如:

cout.unsetf(ios::showpos);

二、操纵元

操纵元是以非传统方式调用的函数。调用操纵元之后,本身会调用另外一个成员函数。操纵元位于操作符<<之后。例如endl。
讨论两个新的操纵元setw和setprecision。
使用操纵元需带#include 头文件
使用setw操纵元发送到输出流,随即会调用width()成员函数,用不同的域宽输出数字。

cout << "Start" << setw(4) << 10;

使用setprecision操纵元会调用成员函数precision(),指定小数的位数。

    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout << setprecision(2) << 10.3 <<endl;
//	输出:10.30

使用操纵元setprecision时,设置会一直生效,直到再次调用setprecision或precision

1.setfill函数

作用:将一个特定的字符设置为流 的填充字符
需要头文件# include < iomanip>
实例:

// setfill example
#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setfill, std::setw

int main () {
  std::cout << std::setfill ('x') << std::setw (10);
  std::cout << 77 << std::endl;
  return 0;
}

输出:xxxxxxxx77

2.setbase函数

功能:设置基准标志

base argumentsame as inserting…
8oct
10dec
16hex
any otherresetiosflags(ios_base::basefield)
// setbase example
#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setbase

int main () {
  std::cout << std::setbase(2);
  std::cout << 4 << std::endl;
  return 0;
}

输出:6e

3.格式输出符oct dec hex

功能:设置特定流的输出格式
实例:

#include <iostream>
using namespace std;
int main()
{
cout<<oct<<1<<endl;	//八进制输出
cout<<dec<<2<<endl;	//十进制输出
cout<<hex<<3<<endl;	//十六进制输出
return 0;
}

二进制输出方法:
包含#include < bitset>头文件,使用bitset<>()函数
实例:

#include <iostream>
using namespace std;
int main()
{
cout<<bit<5>(6)<<endl;	//字宽为5的6的二进制数输出
return 0;
}

三、流作为函数实参

流可作为函数实参使用,但是形参必须传引用,流参数不能传值。
例如:

#include <iostream>
#include <fstream>
using namespace std;

void f(ofstream& outfile, ifstream& infile);
//  前条件:oufile和infile流已用open函数连接到文件

int main()
{
    ofstream outfile;
    ifstream infile;
    outfile.open("abc.txt");
    infile.open("abc.txt");
    f(outfile,infile);
    outfile.close();
    infile.close();
    return 0;
}

void f(ofstream& outfile, ifstream& infile)
{
    char data[100];
    cin >> data;
    outfile << data <<endl;

    char a[100];
    infile >> a;
    cout << a << "X" << endl;

}

由于水平有限,本博客难免会有不足,恳请大佬们不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值