您的位置:首页 > 其它

关于格式控制 实例:不同基数形式的输入/输出

2016-04-26 21:49 375 查看
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 提取空白字符

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: