1,I/O流
在C++的标准库中,将用于进行数据输入输出的类统称为“流类”.
cin是流类istream的对象,cout是流类ostream的对象.
要使用流类,需要在程序中包含头文件;
2,标准I/O
对系统指定的标准设备的输入和输出,即从键盘输入数据,输出到显示器屏幕,这种输入输出称为标准的输入和输出,简称标准I/O;
3,文件I/O
将外存磁盘文件作为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件,这种方式称为文件的输入和输出,简称文件I/O;
4,串I/O
对内存中指定的空间进行输入和输出,通常指定一个字符数组,作为存储空间(实际上可以利用这个空间存储任何信息),这种输入和输出称为字符串输入输出,简称串I/O;
5,输入输出流
ostream头文件里面定义了四个标准流对象,它们是cin,cout,cerr和clog;
对象 | 功能 | 特点 |
---|---|---|
cin | 标准输入 | 从键盘读取,可以重定向为从头文件中读取; |
cout | 标准输出 | 输出到屏幕,可以重定向为向文件中写入; |
cerr | 标准错误 | 必须输出到屏幕,不可以重定向为向文件写入; |
clog | 标准错误 | 输出到屏幕,可以重定向为向文件写入; |
注意:所谓 重定向,就是将输入的源或输出的目的地改变,例如:cout本来是输出到屏幕上的,现在经过重定向,就可以输出到文件中;
在命令行中,>和<是数据流向的符号;
例如:
在当前文件夹下创建一个go.txt和一个in.txt文件;
在文件写了一个输入输出的m.exe文件;
打开命令窗口,输入m.exe>go.txt(代表将输入的数据流向go.txt);
输入m.exe<go.txt(代表将go.txt里的数据流向m.exe用以输入)
输入m.exe<in.txt>go.txt(代表将in.txt里的数据流向m.exe,之后将m.exe里的数据流向go.txt中)
6,标准输入流API
1,cin.get();
int cin.get();//读取一个字符
istream& cin.get(char* _str,streamsize _Count,char _Delim)//读取字符串,超过count大小或者遇到字符delim时停止;
2,cin.getline()
istream& getline(char* _str,streamsize _count);
istream& getline(char* _str,streamsize _count,char _Delim);
注意:用cin>>str输入字符串时,遇到空格会截断,所以最好用cin.getline();
7,标准输出流格式控制两种方式
1,通过流成员函数进行输入输出格式控制
1,gobal类型 表示该设置会全局生效(即会影响到后面的操作);
cout.width(100);//设置内容所占宽度,默认右对齐,空格填充;
cout.fill('0');//设置填充字符,把上面的空格替换成指定字符;//非全局
cout.setf(ios::left);//设置左对齐;
cout.setf(ios::scientific);//用科学计数法显示浮点数;
cout.unsetf(ios::scientific);//取消科学计数法显示浮点数;
cout.precision(5);//设置浮点数精度,包括整数位;
cout.setf(ios::showbase | ios::uppercase);//显示前缀并用大写的方式显示十六进制前缀;
cout<<oct<<1314<<endl;//以八进制显示整数;
cout<<dec<<1314<<endl;//以十进制显示整数;
cout<<hex<<1314<<endl;//以十六进制显示整数;
cout<<setf(ios::showpos);//强制显示符号(+ -);
cout.setf(ios::dec);//设置十进制显示整数;
注意:由于有些设置会全局生效,很不方便,因此提供了iomanip库解决此问题;
2,头文件中提供了各种控制符,进行输入输出格式控制;
控制符 | 作用 |
---|---|
setbase(n) | 设置整数为n进制(n=8,10,16); |
setfill(n) | 设置填充字符 |
setprecision(n) | 设置浮点数精度 |
setw(n) | 设置内容宽度 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法显示 |
setflags(ios::left) | 输出为左对齐 |
8,字符串流
C++提供了这个头文件,可以进行字符串转换;
案例:
int num=999;
char str[99]="";
stringstream strem(str);//创建流对象
strem<<num;
strem>>str;
cout<<str<<endl;//输出999;
//注意:当需要使用同一流对象进行多次转换时,必须调用clear()成员函数;
如:
stringstream stram;
int num;
stram<<"783";
stram>>num;
stram.clear();//在进行多次转换时,必须清除stram
char str[99]="";
stram<<9.33;
stram>>str;
cout<<str<<endl;