c++中的输入输出都是用“类”来进行,无论是 cin,和cout都是类的一个对象。
c++中负责IO的有3中类型
1: istream、ostream 从流读写数据(i表示in也就是读,o表示out也就是写),你可以认为流就是控制台输入输出的数据,cin和cout就分别是他们俩的对象。
2: ifstream、ofstream f 表示file,也就是从文件读写数据
3: istringstream, ostringstream 从string读写数据。
其中2,3是继承的1。那么有了这些类之后读写过程是怎样的呢?
我们以cin为例,首先你在控制台输入字符敲下回车键以后数据就到了到缓冲区,你可以认为cin与缓冲区之间已经建立好了一层通道可以直接读数据,所以我们直接用cin读数据就可以了是不是很简单。
那如何从文件读写数据?和cin一样,我们创建一个文件流对象,然后需要我们自己用open函数建立通道,然后就可以通过对象进行写读数据操作。第三种string也是一样的。
/*cod.cpp文件*/
#include <iostream>
#include "my_lib.h"
using namespace std;
int main(){
string s;
cin >>s; //[空格][空格]abc[空格]cd[回车]
cout <<s;//abc
ifstream ifs;//cin是 istream类的对象,我自己创建了一个ifstream类的对象
ofstream ofs;
ifs.open("./a.txt");//建立通道
ofs.open("./b.txt");//建立通道
ifs >> s;//和cin效果一样,只不过是从文件读数据
ofs << s;
//程序开始之前 a.txt内容为 hello hi b.txt为空白文件
//程序结束之后 b.txt的内容变为了 hello
}
分析上面的代码我们发现无论是ifs还是cin都只读取了一串字符,遇到空格就不读取了,而且一开始的自动忽略了,那剩下的内容呢?读写规则是怎样的,还有如果想读取一行又该如何解决?
cin cout 具体读写规则
首先cin是从标准输入(缓冲区)读数据的。当开始读数据时,如果一开始遇到的是分隔符比如tab 换行,空格等,它会自动忽略这些字符接着读,如果读入数据之后再遇到分隔符则本次读入结束(进入下一行代码),注意此时分隔符仍留在缓冲区未清理。举个栗子
#include <iostream>
#include "my_lib.h"
using namespace std;
int main(){
string s1,s2;
int a1,a2;
//用键盘敲下 [空格][空格]abc[空格]12[回车]
cin >> s1;<