在C语言中,用printf()和scanf()进行输入输出,但是不能保证所输入输出的数据是安全、可靠的。C++的I/O操作时类型安全的(type safe)。
iostream头文件中定义了四种流对象,分别是cin、cout、cerr和clog。其中,向键盘输入时用cin流,向显示器输出时用cout流,向显示器输出错误信息
时用cerr和clog流。
cerr和cout的流的区别:
两者虽然都是向显示器输出数据,但是cout可以重定向到其他文件,而cerr只能向显示器输出错误提示信息,而且错误信息是根据用户需要设置的。
clog流和cerr差不多,都是向显示器输出错误信息,但是cerr是不经过缓冲区,直接显示在显示器上,而clog是先经过缓冲区,等到缓冲区满
或者遇到endl时,才向显示器输出结果。
格式输出数据
方法一:使用控制符(但要包含头文件 iomanip)
例子:
int a;
cin>>a;
cout<<"dec:"<<dec<<a<<end; // 以十进制输出整数a
cout<<"hex:"<<hex<<a<<endl; //以十六进制输出整数a
cout<<"oct"<<setbase(8)<<a<<end; //以八进制输出整数a
char *p="china";
cout<<setw(10)<<p<<endl; //指定输出域宽为10,输出字符串 输出结果为 china
cout<<setfill('*')<<setw(10)<<p<<endl; //指定域宽为10,空白部分用*代替 输出结果为*****china
方法二:用流对象的成员函数控制输出格式
流成员函数setf通过格式标志来控制输出的格式,格式标志在类ios中被定义为枚举类型,因此在引用的时候要加上类ios和域运算符::
例子:
inta=21
cout.setf(ios::showbase);//显示基数符号(0x或0)
cout<<″dec:″<<a<<endl; //默认以十进制形式输出a
cout.unsetf(ios::dec); //终止十进制的格式设置
cout.setf(ios::hex); //设置以十六进制输出的状态
cout<<″hex:″<<a<<endl; //以十六进制形式输出a
cout.unsetf(ios::hex); //终止十六进制的格式设置
cout.setf(ios::oct); //设置以八进制输出的状态
cout<<″oct:″<<a<<endl; //以八进制形式输出a
cout.unseft(ios::oct);