c++中输入输出, cin,cout,ifstream ofstream getline等IO接口详解

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。那么有了这些类之后读写过
摘要由CSDN通过智能技术生成

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;<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值