C++输入与输出
1.C++输入与输出简介
C++提供了一套新的输入/输出库来替代C中的输入/输出库,新的库提供了一套更容易使用的、更灵活的、可扩展的系统(PS:具体表现在使用C++库进行输入输出时不需要进行额外的格式化);
输入:在C++中,程序的输入被看做是从键盘、磁盘文件或者其他输入源输入的一串连续的字节流;
输出:程序的输出被看做是输出到显示器、磁盘文件或者其他目标的一串连续的字节流;
当使用C++的库进行输出操作时,必须包含头文件iostream.
cin代表标准输入,cout代表标准输出,cerr代表标准出错;虽然cout和cerr的默认输出目的地都是屏幕,但是cout是带缓冲的,cerr是不带缓冲的;
关于输入操作符<<有一点需要注意的是:它同scanf一样,默认忽略前导空格,若要改变此动作需使用操纵符noskipws;
例子:
//==================================================
//程序描述:浅谈C++输入与输出之一
//Date:2016年1月10日 by Ye_wolf
//备注:
// 本例用C++进行书写时,不需要考虑你输入/输出是何种数据类型
//==================================================
//========================【头文件部分】=============================
#include <iostream>
using namespace std;
//=========================【主函数】============================
int main()
{
int id;
float av;
cout<<"请输入编号(id)和平均值(av):"<<endl;
cin>>id>>av;
cout<<"Id="<<id<<endl
<<"Average="<<av<<endl;
return 0;
}
2.操纵符
C++中,操纵符主要是用来格式化输入/输出;
首先,需要说明下操纵符包含的头文件,若无参数(如hex,endl)则需要包含在头文件iostream,若有参数(如setw(),setprecision(),setfill())则需要包含在头文件iomanip;
再则,除却setw()外,其他操纵符对后面所有的输入输出都产生影响;
//==================================================
//程序描述:浅谈C++输入与输出之二操纵符
//Date:2016年1月10日 by Ye_wolf
//备注:
//==================================================
//========================【头文件部分】=============================
#include <iostream>
#include <iomanip>
using namespace std;
//=========================【主函数】============================
int main()
{
int i=4,j=5,k=6,m=91;
float fa=1.12,fb=10.123,fc=1000.1234,fd=1,fe=-0.556;
char c='!',ch;
//操纵符-----------endl:换行
cout<<"操纵符-----------endl:换行"<<endl;
cout<<i<<c<<endl
<<j<<c<<'\n'
<<k<<c<<endl;
cout<<"=================="<<endl;
//操纵符-----------oct、dec和hex:八、十、十六进制
cout<<"操纵符-----------oct、dec和hex:八、十、十六进制"<<endl;
cout<<"m="<<m<<"(十进制)\n";
cout<<"m="<<oct<<m<<"(八进制)\n";
cout<<"m="<<hex<<m<<"(十六进制)\n";
cout<<"如果在后面的输出不将进制改回来,则后面的输出均采用16进制"<<endl;
cout<<"没改成十进制:"<<endl
<<"十进制数888:"<<888<<endl
<<"改成十进制:"<<endl
<<"十进制数888:"<<dec<<888<<endl;
cout<<"=================="<<endl;
//操纵符-----------setw():设置域宽
cout<<"操纵符-----------setw:设置域宽"<<endl;
for(i=1;i<=1000;i*=10)
cout<<setw(6)<<i<<'\n';
cout<<"=================="<<endl;
//操纵符-----------setfill():设置填充字符(当域宽大于输出项宽度时)
cout<<"操纵符-----------setfill():设置填充字符"<<endl;
cout<<setfill('*');
for(i=1;i<=1000;i*=10)
cout<<setw(6)<<i<<'\n';
cout<<"=================="<<endl;
//操纵符-----------setprecision():设置浮点数精度,默认值为6
cout<<"操纵符-----------setprecision():设置浮点数精度"<<endl;
cout<<"未设置精度前,各变量的值:"<<endl;
cout<<"fa="<<fa<<'\n'
<<"fb="<<fb<<'\n'
<<"fc="<<fc<<'\n';
cout<<"设置精度后,各变量的值:"<<endl;
cout<<setprecision(2);
cout<<"fa="<<fa<<'\n'
<<"fb="<<fb<<'\n'
<<"fc="<<fc<<'\n';
cout<<setprecision(6);
cout<<"=================="<<endl;
//操纵符-----------left、right:左对齐、右对齐(默认右对齐)
cout<<"操纵符-----------left、right:左对齐、右对齐(默认右对齐)"<<endl;
cout<<"左对齐:"<<endl;
for(i=1;i<=1000;i*=10)
cout<<left<<setfill('*')<<setw(6)<<i<<'\n';
cout<<"右对齐:"<<endl;
for(i=1;i<=1000;i*=10)
cout<<right<<setfill('*')<<setw(6)<<i<<'\n';
cout<<"=================="<<endl;
//操纵符-----------showpoint和noshowpoint、showpos和noshowpos:
// 强制显示小数点以及全部尾随零、不显示尾随零,若可能去掉小数点
// 非负数在其前面显示+号、非负数在其前面不显示+号
cout<<"操纵符-----------showpoint和noshowpoint、showpos和noshowpos:"
<<"强制显示小数点以及全部尾随零、不显示尾随零,若可能去掉小数点"
<<"非负数在其前面显示+号、非负数在其前面不显示+号"<<endl;
cout<<showpoint<<showpos;
cout<<"fa="<<fa<<endl;
cout<<"fd="<<fd<<endl;
cout<<"fe="<<fe<<endl;
cout<<noshowpoint<<noshowpos;
cout<<"=================="<<endl;
//操纵符-----------fixed:用定点符号表示浮点数d.ddd、scientific:用科学计数法表示浮点数
cout<<"操纵符-----------fixed:用定点符号表示浮点数d.ddd"<<endl;
cout<<fixed;
cout<<"fa="<<fa<<endl;
cout<<"fc="<<fc<<endl;
cout<<"操纵符-----------scientific:用科学计数法表示浮点数"<<endl;
cout<<scientific;
cout<<"fa="<<fa<<endl;
cout<<"fc="<<fc<<endl;
cout<<"=================="<<endl;
//操纵符-----------skipws、noskipws:忽略前导空白,不忽略前导空白
cout<<"操纵符-----------skipws、noskipws:忽略前导空白,不忽略前导空白"<<endl;
cin>>noskipws;
while(cin>>ch)
cout<<ch;
cout<<skipws;
cout<<"=================="<<endl;
return 0;
}
3.混合使用C\C++输入/输出
在程序中同时使用C的输入/输出库函数和C++的类库会出现问题,因为这两个库中的读写操作不会自动同步。如果确实需要同时使用这两个库,应在任何输入输出函数前调用如下函数:
Ios::sync_with_stdio();