1、设置标志字
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "please input a in decimal:";
cin.setf(ios::dec, ios::basefield); //置十进制数输入
cin >> a;
cout << "please input b in hexadecimal:"; cin.setf(ios::hex, ios::basefield); //置十六进制数输入 cin >> b; cout << "please input c in octal:"; cin.setf(ios::oct, ios::basefield); //置八进制数输入
cin >> c;
cout << "Output in decimal:\n";
cout.setf(ios::dec, ios::basefield);
cout << "a=" << a << " b=" << b << " c=" << c << endl;
cout << "Output in hexadecimal:\n";
cout.setf(ios::hex, ios::basefield);
cout << "a=" << a << " b=" << b << " c=" << c << endl;
cout << "Output in octal:\n";
cout.setf(ios::oct, ios::basefield);
cout << "a=" << a << " b=" << b << " c=" << c << endl;
}
程序中,用一下方式置标准输出流八进制基数形式插入数据项,置值之前用了ios::basefield清除各技术格式位:
cout.setf(ios::oct,ios::basefield)
或
cout.setf(ios::oct|ios:;basefield) //用或运算符|同时设置几个标志字
格式标志字的每一位表示一种格式,格式位之间会有依赖关系。例如,dec,oct,hex在一个时刻只能有一个位被设置,在设置一个位之前应该清除其他有排斥的位,为了便于清除同类排斥位,ios定义了几个公有静态符号常量:
ios::basefield 值为 dec|oct|hex
ios::adjustfield 值为left|right|internal
Ios::floatfield 值为scientific|fixed
常见标志常量:
ios::showpos 正数前加 + 号
ios::fixed 定点形式显示浮点数
ios::scientific 科学计数法显示浮点数
ios::uninbuf 插入操作后立即刷新流
为什么要刷新流?
想输出流写数据时,流不必立刻把数据写到目的中。当下列条件之一发生时,或者累积的数据
1.到达某种标记,比如endl
2.流超出了作用域,因此被取消
3.对应的输入流请求输入,比如cin输入时,cout会刷新缓冲
4.流缓冲已满
刷新流可以用cout.flush()或者cout<<flush或者cout<<endl或者cout.setf( ios::unitbuf )
endl不是只有换行的作用吗
第一:endl刷新的是整个缓冲区(例如输出缓冲区)
第二:C++中cin与cout是绑在一起的,也就是说任何cin的调用都会导致前面的cout关联的缓冲区被刷新,例如:
cout<<"Input a string :"; // 这是没有加endl,所以字符串留在输出缓冲区中
cin>>str; // 调用了cin后会刷新cout的缓冲区,也就是会执行这一句的时候我们才看到屏幕输出的提示语句
为什么要清除标志位
为什么要清除标志位?
格式标志字的每一位表示一种格式,格式位之间会有依赖关系。例如,dec,oct,hex在一个时刻只能有一个位被设置,在设置一个位之前应该清除其他有排斥的位。
2、使用格式控制符(iostream中的控制符)
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "please input a in decimal:"; //置十进制数输入
cin >> dec >> a;
cout << "please input b in hexadecimal:"; //置十六进制数输入
cin >> hex >> b;
cout << "please input c in octal:"; //置八进制数输入
cin >> oct >> c;
cout << "output in decimal:\n";
cout << "a=" << a << " b=" << b << " c=" << c << endl; //默认十进制数输出
cout << "output in hexadecimal:\n";
cout << hex << "a=" << a << " b=" << b << " c=" << c << endl; //置十六进制数输出
cout << "output in octal:\n";
cout << oct << "a=" << a << " b=" << b << " c=" << c << endl; //置八进制数输出
}
Iostream中常见的格式控制符
endl 输出新行,并清空流
ends 输出字符串结束符,并清空流
flush 清空流缓冲区
dec 用十进制数表示法输入或输出数值
hex 用十六进制数表示法输入或输出数值
oct 用八进制数表示法输入或输出数值
ws 提取空白字符