C++中cin、cout的一些特殊用法
2019-02-28 本文已影响0人
长林赤焰
进制转换
cout默认以十进制的格式输出整数
int a = 042;
cout << a << endl;
//输出结果是34
如果想要cout以八进制或十六进制格式输出整数,需要在输出之前额外执行一条语句
int a = 42;
cout << oct;
cout << a << endl;
cout << hex;
cout << a <<endl;
// 输出结果分别为52和2a
八进制和十六进制还可以用来输出其对应的转义字符
cout << '\077' << endl; // ?
cout << '\x3f' << endl; // ?
cout << "\042 and \x3f\n"; // " and ?
cin、cout的实质
cin和cout本质上分别是istream类和ostream类的对象,这也是为什么要使用<iostream>头文件的原因。
它们所对应的<<和>>的使用,称作操作符重载,因此,他们可以读取或输出多种类型的值。
此外。它们还具有类的成员函数,如cout.put()、cin.get()、cin.getline()
// cout.put()输出一个字符
cout.put('$');
输出指定长度的浮点数
ostream类的setf()方法迫使输出使用定点表示法,防止程序把较大的值切换为E表示法,并使程序显示到小数点后6位小数。参数ios_base::fixed和ios_base::floatfield是iostream中提供的常量。
using namespace std;
cout.setf(ios_base::fixed, ios_base::floatfield);
float tub = 10.0 / 3.0;
double mint = 10.0 / 3.0;
const float million = 1.0e6;
cout << tub << endl; // 3.333333
cout << million * tub << endl; // 3333333.250000
cout << 10 * million * tub << endl; // 33333332.000000
cout << mint << endl; // 3.333333
cout << million * mint << endl; // 3333333.333333
从中也可以看出float型浮点数有效位数比double类型的有效位数少。
调用cin、cout的结果
cin << "dog";
cin.get();
cout << "cat\n";
// 上述调用的结果仍然是一个cin或cout对象,因此可以连续调用
char Mystr[10];
cin.get().get(Mystr, 10);
cout << "cat" << endl;