最新c++课件第十三章 输入输出流(1)
- 格式:doc
- 大小:1.18 MB
- 文档页数:47
c++课件第十三章输入输出流(1)第13章输入输出流13.1 C++的输入和输出13.1.1输入输出的含义(1)对系统指定的标准设备进行输入和输出。
(2)以外存磁盘文件为对象进行输入和输出。
(3)对内存指定的空间进行输入和输出。
13.1.2 C++的I/O对C的发展——类型安全和可扩展性13.1.3 C++的输入输出流1. iostream类库中有关的类图13.1图13.2图13.32. 与iostream类库有关的头文件iostream fstream strstream stdiostream iomanip 3. 在iostream头文件中定义的流对象4. 在iostream头文件中重载运算符ostream operator << (char *);//用于向输出流插入一个字符串cout<<"C++";相当于cout.operator<<("C++");对于自己的类,可用11章的方法进行重载。
13.2标准输出流13.2.1 cout,cerr和clog流1.cout流对象(1)cout流是流向显示器的数据。
(2)输出基本类型数据时,可以不考虑数据的类型是什么。
(3)cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据,然后插入一个换行符,并刷新流(清空缓冲区)。
2.cerr流对象cerr流是标准错误流。
cerr流被指定与显示器关联。
cout 流通常是传送到显示器输出,但也可以被重定向输出到磁盘文件。
例13.1 解一元二次方程ax2+bx+c=0#include <iostream>#include <math.h>using namespace std;void main(){float a,b,c,disc;cout<<"please input a,b,c:";cin>>a>>b>>c;if (a==0)cerr<<"a is equal to zero,error!"<<endl;elseif ((disc=b*b-4*a*c)<0)cerr<<"disc=b*b-4*a*c<0"<<endl;else{ cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;}}please input a,b,c:0 2 3a is equal to zero,error!please input a,b,c:5 2 3disc=b*b-4*a*c<0please input a,b,c:1 2.5 1.5x1=-1x2=-1.53. clog流对象clog流也是标准错误流,也是在显示器上显示出错信息。
与cerr的微小区别是:cerr不经缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇到endl时向显示器输出。
13.2.2格式输出1. 使用控制符控制输出格式例13.2用控制符控制输出格式#include <iostream>#include <iomanip>using namespace std;int main(){int a;cout<<"input a:";cin>>a;cout<<"dec:"<<dec<<a<<endl;cout<<"hex:"<<hex<<a<<endl;cout<<"oct:"<<setbase(8)<<a<<endl;char *pt="China";cout<<setw(10)<<pt<<endl;cout<<setfill('*')<<setw(10)<<pt<<endl;double pi=22.0/7.0;cout<<setiosflags(ios::scientific)<<setprecision(8); cout<<"pi="<<pi<<endl;cout<<"pi="<<setprecision(4)<<pi<<endl;cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl; return 0;}input a:34dec:34hex:22oct:42China*****Chinapi=3.14285714e+000pi=3.1429e+000pi=3.1432. 用流对象的成员函数控制输出格式例13.3 用流控制成员函数输出数据。
#include <iostream>using namespace std;void main(){ int a=21;cout.setf(ios::showbase);cout<<"dec:"<<a<<endl;cout.unsetf(ios::dec);cout.setf(ios::hex);cout<<"hex:"<<a<<endl;cout.unsetf(ios::hex);cout.setf(ios::oct);cout<<"oct:"<<a<<endl;char *pt="China";cout.width(10);cout<<pt<<endl;cout.width(10);cout.fill('*');cout<<pt<<endl;double pi=22.0/7.0;cout.setf(ios::scientific);cout<<"pi=";cout.width(14);cout<<pi<<endl;cout.unsetf(ios::scientific);cout.setf(ios::fixed);cout.width(12);cout.setf(ios::showpos);cout.setf(ios::internal);cout.precision(6);cout<<pi<<endl;}dec:21hex:0x15oct:025China*****Chinapi=*3.142857e+000+***3.14285713.2.3用流成员函数put输出字符put是用于输出单个字符的成员函数。
cout.put('a');cout.put(65+32);例13.4 有一个字符串”BASIC”,要求把它按相反的顺序输出。
#include <iostream>using namespace std;int main(){char *a="BASIC";for(int i=4;i>=0;i--)cout.put(*(a+i));cout.put('\n');return 0;}也可以用putchar函数实现。
#include <iostream>int main(){char *a="BASIC";for(int i=4;i>=0;i--)putchar(*(a+i));putchar('\n');return 0;}13.3标准输入流13.3.1 cin流可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。
if(!cin)cerr<<"error";例13.5 通过测试cin的值,判断流对象是否处于正常状态。
#include <iostream>using namespace std;void main(){float grade;cout<<"enter grade:";while(cin>>grade){ if(grade>=85) cout<<grade<<" GOOD!"<<endl;if(grade<60) cout<<grade<<" fail!"<<endl;cout<<"enter grade:";}cout<<"The end."<<endl;}enter grade:67enter grade:8989 GOOD!enter grade:5656 fail!enter grade:100100 GOOD!enter grade:wThe end.13.3.2用于字符输入的流成员函数1.用get函数读入一个字符(1)不带参数的get函数cin.get();用来从指定的输入流中提取一个字符(包括空白字符),函数返回值就是读入的字符。
若遇到文件结束符CTRL+Z,则函数返回文件结束标志EOF(End Of File),一般以-1代表EOF。
例13.6 用get函数读入字符。
#include <iostream>using namespace std;void main(){ char c;cout<<"enter a sentence:"<<endl;while((c=cin.get())!=EOF)cout.put(c);}enter a sentence:I study C++ very hard.I study C++ very hard.(2)有一个参数的get函数cin.get(ch);其作用是从输入流中读取一个字符,赋给字符变量ch。