C++输入输出

一,缓冲区同步

在C++涉及到大量输入输出时,为了加快速度,我们可以在main函数里面第一行加一句ios::sync_with_stdio(false);

这句话的意思是关闭缓冲区的同步,默认是开启的。

如果是开启的,那么cin cout 和scanf printf可以随意混写,即cpp里面写c语言。

如果是关闭的,cin cout 和scanf printf就不能混写,不然会造成输入输出的顺序错乱。

一般是因为嫌cin cout比较慢才加一句ios::sync_with_stdio(false);  这个时候就不要用scanf printf,只用cin cout

cin cout之所以慢是因为大部分时间在做缓冲区的同步,关闭了之后就很快,基本和scanf printf差不多,甚至有时候更快。

二,取消缓冲区

cout是ostream类的全局单例对象,而ostream继承了ios_base类,

除了按照ios_base类中的方式去设置格式,也可以用cout重载的方法:

int main()
{
	cout << cout.flags() << endl;
	cout << unitbuf;
	cout << cout.flags() << endl;
	cout << nounitbuf;
	cout << cout.flags() << endl;
	return 0;
}

输出:

513
515
513

其中unitbuf表示原子缓冲区,即没有缓冲区,直接把输出流的内容输出。

反之,nounitbuf表示有缓冲区。

三,cin输入错误处理

当代码是输入整数,而实际输入是非法字符(如字母)时,程序就会挂掉。

这时需要重置cin标识和清空缓冲区才行。

示例:

	cin >> r >> c;
	if (!cin) //当输入失败(比如输入的不是整数)时,必须先重置cin,然后手动清空cin的缓冲区,然后才能重新输入
	{
		cin.clear(); //这2个函数用来处理错误输入
		cin.ignore();//清空cin缓存区
		//cin.sync();
	}

clear函数是清空cin标识的,cin标识是输入错误时产生的,要手动清除才能继续输入。

ignore和sync函数都可以用来清空缓冲区,这2个函数有区别,但是区别不大。

四,文件尾

五,循环读取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值