C++输入输出

举报
用户已注销 发表于 2021/11/19 01:09:20 2021/11/19
【摘要】 一,缓冲区同步 在C++涉及到大量输入输出时,为了加快速度,我们可以在main函数里面第一行加一句ios::sync_with_stdio(false); 这句话的意思是关闭缓冲区的同步,默认是开启的。 如果是开启的,那么cin cout 和scanf printf可以随意混写,即cpp里面写c语言。 如果是关闭的,cin ...

一,缓冲区同步

在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重载的方法:


  
  1. int main()
  2. {
  3. cout << cout.flags() << endl;
  4. cout << unitbuf;
  5. cout << cout.flags() << endl;
  6. cout << nounitbuf;
  7. cout << cout.flags() << endl;
  8. return 0;
  9. }

输出:

513
515
513

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

反之,nounitbuf表示有缓冲区。

三,cin输入错误处理

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

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

示例:


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

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

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

四,文件尾

五,循环读取

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/120775811

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。