写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!
相关文章:
[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
作用:将一个特定的字符设置为流 的填充字符
需要头文件# include < iomanip>
实例:
// setfill example
#include // std::cout, std::endl
#include // std::setfill, std::setw
int main () {
std::cout << std::setfill ('x') << std::setw (10);
std::cout << 77 << std::endl;
return 0;
}
输出:xxxxxxxx77
功能:设置基准标志
base argument | same as inserting… |
---|---|
8 | oct |
10 | dec |
16 | hex |
any other | resetiosflags(ios_base::basefield) |
// setbase example
#include // std::cout, std::endl
#include // std::setbase
int main () {
std::cout << std::setbase(2);
std::cout << 4 << std::endl;
return 0;
}
输出:6e
功能:设置特定流的输出格式
实例:
#include
using namespace std;
int main()
{
cout<<oct<<1<<endl; //八进制输出
cout<<dec<<2<<endl; //十进制输出
cout<<hex<<3<<endl; //十六进制输出
return 0;
}
二进制输出方法:
包含#include < bitset>头文件,使用bitset<>()函数
实例:
#include
using namespace std;
int main()
{
cout<<bit<5>(6)<<endl; //字宽为5的6的二进制数输出
return 0;
}
流可作为函数实参使用,但是形参必须传引用,流参数不能传值。
例如:
#include
#include
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;
}
由于水平有限,本博客难免会有不足,恳请大佬们不吝赐教!