C++ 关于输入到文件结束
2021/12/30 1:07:15
本文主要是介绍C++ 关于输入到文件结束,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
输入到文件结束应该是所有大学计算机刚学c语言时写oj一定会碰到的,那时候几乎会把以下几句死记硬背下来
while(~scanf("%d",&a)) while(scanf("%d",&a)!=EOF) while(cin>>a)
其中c++ 的这句while(cin>>a)
到底是什么含义呢。
直观上看就是到文件结束就返回一个0,否则非0.
实际上cin是C++输入流的一个对象,而输入流是否运行正常,其本身是有一个状态的。为了表现这种状态,每个输入流对象都会有一个rdstate()
函数,这个函数会返回一个常量,其二进制的每一个位用于表示输入流一些特定的状态是否出现了,其中输入到文件结束就是其中之一的eof()
状态,如果这个状态出现,rdstate()
返回的函数的响应位就会被置位1,然后该输入流的另一个函数fail()就会返回true。所以while(cin>>a)
其实可以写成while(cin>>a,!cin.fail())
。
因此从以上我们还可以联想到一个问题,既然输入到文件结束后,输入流处于一个不正常状态,那么他之后还能使用吗?
#include<iostream> using namespace std; int main() { int a; while(cin>>a); int b; cin>>b; cout<<b<<endl; system("pause"); }
在使用这个代码时我们发现我们如果对
a
a
a输入^Z,退出循环后,并不能正常地输入b,也就是cin的状态没有恢复。
这时候就要用到一个输入流的另一个函数,clear()
,表示将其状态位全部归0,也就恢复了正常状态。
#include<iostream> using namespace std; int main() { int a; while(cin>>a); int b; cin.clear(); cin>>b;//这时候b可以正常输入了 cout<<b<<endl; system("pause"); }
关于C++ io库中的其它操作,后续会补上。
这篇关于C++ 关于输入到文件结束的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding