c++学习 I/O

c++学习 I/O

输入还是输出,是相对于程序而言的。

标准I/O

标准输入:从键盘输入进程序。
标准输出:从程序输出到显示器/控制台。

注: 我们常用的cout(标准输出)、cin(标准输入)等,并不是关键字,而是全局流对象。另有cerr(标准错误(输出))和clog(标准日志(输出)),其中cerr没有缓冲区,而clog有。

缓冲区

缓冲区是一块内存空间。
以cin为例,缓冲区可以看作程序与键盘之间的桥梁。cin首先从缓冲区里读数据,若缓冲区无数据可用,则阻塞,等待键盘向缓冲区输入数据。

cout<<"hello";		//写入缓冲区
cout<<"hello"<<endl;	//输出到显示器

标准输入流cin

cin.get()
从缓冲区得到一个字符并返回。
用例:

char ch;
cin.get(ch);	//读一个字符到ch

char buf[256];
cin.get(buf,256);	//读一个字符串到buf

cin.getline()
读取一行。
用例:

char buf[256];
cin.get(buf,256);	//读一行数据到buf(不读换行)

cin.ignore()
忽略(取走但不使用)接下来的字符。
用例:

cout << (char)cin.get() << endl;
 cin.ignore();	//忽略接下来的一个字符。
 cout << (char)cin.get() << endl;

若输入asd,则输出ad

cin.ignore(10);	//忽略接下来的10个字符。
cin.ignore(10,'\n');	//忽略至多10个字符,直到遇到'\n'。

cin.peek()
查看(不取走)缓冲区接下来的字符,并返回。
用例:

cin.peek();

cin.putback()
将字符放回缓冲区。
用例:

char ch;
cin.get(ch);
cin.putback(ch);

标准输出流cout

cout.flush()
刷新缓冲区,将内容显示出来。
用例:

cout<<"hello";	//没有endl不会显示到控制台
cout.flush();	//手动刷新以显示缓冲区

cout.put()
输出一个字符。
用例:

cout.put('h').put('i')<<endl;

输出hi

cout.write()
输出字符串。
用例:

cout.write("hello", strlen("hello"));

格式化输出

方法1、设置输出方式

int number = 10;
cout << number << endl;
cout.unsetf(ios::dec);//卸载当前默认的的10进制输出方式
cout.setf(ios::oct); //设置为八进制输出
cout.setf(ios::showbase);//输出时附带八进制前置的0或十六进制前置的0x
cout.width(10);//设置位宽
cout.fill('*');//用字符填充
cout.setf(ios::left);//默认是右对齐,现在设置为左对齐
cout << number << endl;

输出10和012。

方法2、使用输出格式控制符
要包含头文件<iomanip>,具体本文不再介绍。

文件操作

在这里插入图片描述
包含一个<fstream>就好。
创建两个流对象,一个输入一个输出。

以输入流为例

ifstream ism(filename,ios::in);//以只读方式打卡文件

上述为有参构造方式,也可以:

ifstream ism;
ism.open(filename,ios::in);

判断文件是否打开成功:

if(!ism){	// !在类中默认被重载过,可以直接使用
	cout<<"open failed"<<endl;
	return;
}

关闭文件:

ism.close();

文件打开方式
ios::in 输入
ios::out 输出
ios::in|ios::out 输入输出都可
ios::app 追加
ios::binary 二进制

二进制文件操作
使用关键字write和read进行二进制读写:

osm.write((char*)&myclass,sizeof(myclass))//将myclass以二进制写入
ism.read((char*)&other,sizeof(myclass))//以二进制读入一个myclass到other

其他知识点

1、文件以EOF结尾,EOF在键盘上就是CTRL+z。
2、在windows系统中,文件中的换行为\r和\n,也就是说你写一个换行,文件中就保存了’\r’、’\n’两个字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值