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; } */ 因篇幅问题不能全部显示,请点此查看更多更全内容