您的当前位置:首页正文

C++流格式控制的输入输出

来源:爱够旅游网


C++流格式控制的输入/输出

1.用ios类成员函数进行格式化

/* 状态标志 ios类中定义的枚举:*/

enum

{

skipws = 0x0001, left = 0x0002, right = 0x0004, internal = 0x0008, dec = 0x0010, oct = 0x0020, hex = 0x0040, showbase = 0x0080, // 跳过输入中的空白,可用于input

// 左对齐输出,可用于output

// 右对齐输出,可用于output

// 在符号位和基指示符后填入字符,可用于output

// 转换基制为十进制数,可用于output/input

// 转换基制为八进制数,可用于output/input

// 转换基制为十六进制,可用于output/input

// 在输出时显示基指示符,可用于output/input

showpoint = 0x0100, // 在输出是显示小数点,可用于output

uppercase = 0x0200, // 十六进制输出时,表示制式的和表示数值的字符一律为大写,// 可用于output

showpos = 0x0400, // 对正整数显示符号,可用于output

scientific = 0x0800, // 用科学表示法显示浮点数,可用于output

fixed = 0x1000, // 用定点形式显示浮点数,可用于output

unitbuf = 0x2000, // 在输出操作后立即刷新所有流,可用于output

stdio = 0x4000, // 在输出操作后刷新stdout和stderr,可用于output

};

/*

状态标志是一个long类型的长整数,这些枚举值可以作为x——flags上的每一位的标志,若定义了某一项,则x——flags中的某一位为1,否则为0。

*/

/* 用成员函数对状态标志进行操作 */

#include

using namespace std;

void showflags(long f);

void main()

{

long f;

f = cout.flags(); // 取当前状态标志

showflags(f); // 显示状态字

cout.setf(ios::showpos | ios::scientific |ios::fixed); // 追加状态字

f = cout.flags(); // 取当前状态标志

showflags(f); // 显示状态字

cout.unsetf(ios::scientific); // 从状态标志中去掉scientific

f = cout.flags();

showflags(f);

f = cout.flags(ios::hex); // 重新设置状态字

showflags(f);

f = cout.flags(f); // 取当前状态

showflags(f);

return 1;

}

void showflags(long f)

{

long i;

for( i = 0x8000; i ; i = i >> 1 ) // 用右移方式使i中的1不断右移

if( i & f ) // 判断f中的某一位是否为1

cout << \"1\";

else

cout << \"0\";

cout << \"\\n\"; // 或者:cout << endl; 即可以用 endl 代替 \"\\n\"

}

/* 通过设置域宽,填充字符,设置精度来控制输入/输出格式 */

#include

using namespace std;

void main()

{

cout << \"x_width=\" ;

cout.precision(4); // 设置精度,也可以使用:cout << setprecision(4);

cout.width(10); // 设置域宽

cout.fill( '#' ); // 设置填充字符(注意,这里的#只可以用单引号且必须用)

cout << 123 << \" \" << 123.78985 << '\\n';

cout << \"x_width=\";

}

2.使用操纵函数进行格式化控制

C++提供了一种被称为操纵符的控制方式,操纵符是以一个流引用作为其参数,并返回

同一流的引用,因此它可以嵌入到输入/输出操作的链中。

C++预定义的标准操纵符:

dec 设置十进制转换基格式标志,可用于输入/输出

hex 设置十六制的转换基格式标志,可用于输入/输出

oct 设置八进制的转换基格式标志,可用于输入/输出

ws 提取空白字符,仅用于输入

endl 插入换行符,并刷新流,仅用于输出

ends 在串后插入终止空字符,仅用于输出

flush 刷新一个输出流,仅用于输出操作

setbase(int n) 置转换基格式为n(n范围为0,8,10,或16),缺省为0,表示采用十进制.仅输出

resetiosflags(long f) 清除由参数f指定的格式,用于输入输出

setiosflags(long f) 用参数f指定格式位,可用于输入输出.

setfill(int c) 用c置填充字符,可用于输入输出

setprecision(int n) 设置浮点数精度为n,可用于输入输出

setw(int n) 置域宽为n,可用于输入输出操作

其中操作符是在头文件isotream.h中定义的,而操作函数是在iomanip.h中定义的

/* 操纵符和操纵函数的使用 */

#include

#include < iomanip>

using namespace std;

void main()

{

cout << 123;

}

/* 用户自定义操纵符 */

若为输出流定义操纵符函数,则定义下面的形式:

ostream& manip_name(ostream&stream)

{

//your code here;

return stream;

}

若为输入流:

istream&manip_name(istream&stream)

{

//your code here;

return stream;

}

*/

因篇幅问题不能全部显示,请点此查看更多更全内容