问题

最近学习C++碰到这样一个问题,while(cin>>s){},这样的一个语句用什么样的输入能够结束运行,到网上一查,大家给出的答案是ctrl+z,可以使该程序结束。但是,对于ctrl+z的作用和ctrl+z的实质是什么却都没有深刻的剖析。于是,翻书找到了些内容,认为自己解决了这个问题。现将学习到的内容记录如下。首先,先了解一下,究竟能是一个输入流停止工作的有哪些条件。

流的状态

流有正常的状态和错误的状态。流只有在正常的状态下,才能够正常的工作。输入流在正常的工作状态下,才能够执行读的操作。ctrl+z,的作用其实就是让流从正常的工作状态,转为不工作的其实也可以说是错误的工作状态,所以才能让while(cin>>s){}这样的语句结束。

每个流对象都维护了一组条件标志,通过这些条件标志,可以监视流当前的状态。可以调用下面四个谓词成员函数:

1.如果一个流遇到文件结束符,eof返回true。

if(inOut.eof())

  //ok,都读进来了

2.如果试图做一个无效的操作,比如seeking重定位操作超出了文件尾。则bad()返回true。一般地,这表示该流由于某种未定义的方式而被破坏了。

3.如果操作不成功,如打开了一个文件流对象失败或者遇到了一种无效的输入格式,则fail()返回true

ifstream iFile(filename,ios_base::in);

if(iFile.fail())//不能打开

  error_message(........);

4.如果其他条件都不为true,则good()返回true。

if(inOut.good())

显示地修改流对象的条件状态有两种方式。第一,使用clear()成员函数,可以把条件状态复位到一个显式的值。第二,使用setstate()成员函数。

测试

int main(){

cout<<cin<<endl;

string s;

while(cin>>s)

{

  cout<<s;

}

cout<<cin<<endl;

}

输入 a enter b enter ctrl+z enter ctrl+z enter

运行结果:

00480F20

a b

00000000

ctrl+z究竟是什么

ctrl+z的作用是结束流,相当于eof。

总结

if(!cin)

流不能正常工作

else

流能正常工作

写程序的时候,可能要注意这点。ctrl+z只是一个小插曲,但是能从中学到些东西,感觉到欣慰。。。。

转载于:https://www.cnblogs.com/yxnchinahlj/archive/2011/03/21/1990649.html

cin函数的一点理解相关推荐

  1. gather torch_我对torch中的gather函数的一点理解

    本文首发于公众号[拇指笔记] 官方文档的解释 torch.gather(input,dim,index,out=None) → Tensor torch.gather(input, dim, inde ...

  2. python中size的用法.dim_对于numpy中的函数的参数dim的一点理解

    对于numpy中的函数的参数dim的一点理解 经常被dim参数搞混.试着总结了一下.记忆瞬间清晰了 以.max(dim)方法为例: >>> import numpy as np &g ...

  3. 谈谈对APC的一点理解

    谈谈对APC的一点理解 异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助. 1) APCs允许用户程序和系统元件在一个进 ...

  4. 关于js的回调函数的一点看法

    关于js的回调函数的一点看法 原文:关于js的回调函数的一点看法 算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做 ...

  5. java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  6. Hyperledger Fabric 网络环境的一点理解

    Hyperledger Fabric 开发链码,一般都是测试网络开发,然后部署到生产网络. 下面介绍测试网络.生产网络的一点理解. 1 测试网络 使用cryptogen等工具建立测试网络,开发环境使用 ...

  7. 2.深入一点理解C源程序的编译过程

    2.深入一点理解C源程序的编译过程 本文章的大多数灵感及知识来源于南京大学的计算机系统基础教材,如果希望更加深入地对相关知识做进一步了解,可以移步上述相关资源.在网上可以轻易获得上述资源,mooc也有 ...

  8. negroni包和mux包的一点理解

    codegangsta/negroni包和gorilla/mux包的一点理解 Negroni是一个http.Handle,因为他实现了 func (n *Negroni) ServeHTTP(rw h ...

  9. 函数极限:函数在一点处的极限

    数学分析笔记--总目录 文章目录 函数极限:函数在一点处的极限 函数在点 x 0 x_0 x0​ 处的极限:定义 函数在点 x 0 x_0 x0​ 处的极限:性质 唯一性 局部保序性 局部保不等式性 ...

最新文章

  1. 软件开发流程包含哪些内容
  2. 未来,中国空间站将成为怎样的“太空科研站”?
  3. 不要过高估计SDN的能力,也善于发现SDN技术的缺陷之美
  4. Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理
  5. 生产者消费者模式 php 【转】
  6. 前端学习(1486):postman测试接口
  7. Java ClassLoader getParent()方法与示例
  8. chrome应用程序无法启动因为并行配置不正确_Win8打不开软件提示并行配置不正确的解决方法...
  9. 【clickhouse】ClickHouseException code: 225 ZooKeeper session has been expired
  10. 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)
  11. vs中无法加入断点进行调试的解决方案
  12. 教你如何选择弱电工程中使用的交换机?
  13. 为开发者们准备的10款超棒的jQuery视频插件
  14. BUGKU writeup
  15. Stealing Machine Learning Models via Prediction APIs研读报告
  16. 议题曝光!百位顶级讲师、20大论坛,总有一个话题吸引你
  17. 我的 iPhone XS Max 终于装上了这款高逼格数字时钟,优秀不优秀?!
  18. simulink仿真之比较产生阶梯波
  19. C#实现SqlServer连接查询
  20. 小米4x刷android9.0,小米-红米-4X-LOS-安卓9.0.0-稳定版Stable2.0-来去电归属-农历等-本地化增强适配...

热门文章

  1. java线程安全问题之静态变量、实例变量、局部变量
  2. mysql数据库 quota_shell脚本抓取用户存储quota写道mysql并展现到grafana面板
  3. nacos客户端获取配置
  4. 分布式架构的session问题
  5. 字节流读数据(一次读一个字节数据)
  6. Lambda表达式练习2【应用】
  7. HDFS的API操作-获取FileSystem方式
  8. 异常-根据错误类型捕获异常
  9. SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis
  10. 手动使用cglib代理(了解)