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个函数有区别,但是区别不大。
四,文件尾
五,循环读取
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/120775811
- 点赞
- 收藏
- 关注作者
评论(0)