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;