第五章 循环和关系表达式(4)循环和文本输入

(四)循环和文本输入

1.文本输入:cin, cin.get()的函数重构

    通常可以使用循环体来进行文本的输入,输入有输入队列,一般在我们按回车后输入才会到达程序进行处理。比如cin >>a;a为一个char类型,则你可以输入一个句子,等回车后整个字符串才进入内存,将第一个非空白字符赋值给a。

    cin >> a; cin函数直接应用,会读入一个字符,字符忽略空格table等空白字符,也就是遇到这些字符直接略过。如果想要输入空白,则可以使用cin对象的类函数cin.get(a);这种重构类型,它会读入空白的字符,包括空格,table和回车键。cin.get还有一种用法为cin.get(name,size);前面一个参数是字符数组的名称或指针,后一个参数是最大存储量,这个用法可以读入一行(遇到回车或最大存储量的时候就停止读入,回车留在输入队列中)。

2.文件结尾

(1)文件结尾标志EOF

    这个标志可以在键盘模拟,比如windows是任意位置(也可能行首)的ctrl+z加回车,而unix及linux为行首输入Ctrl+D,因此可以使用这个文件结尾标志(用键盘来模拟文件结尾标志)来使循环停止。unix不使用ctrl+z的形式是因为它将这个组合表示为程序挂起,而用fg来恢复运行挂起的程序。

    当cin输入读到文件结尾标志的时候,会设置标志位eofbit和failbit,因此,可以通过这两个标志位判断函数(是cin.eof()==truecin.fail()==true)来确认是否到达了文件结尾。还有一种检查的办法是直接将cin返回的对象强制类型转换成bool型,因为cin返回的仍然是cin对象,当对其进行强制类型转换的时候,如果上一次输入成功,则返回true,否则是false,因此上面的判断可以是这样的while(cin){}或者while(bool(cin)){}。使用cin强制转换是比cin.fail()和cin.eof()更通用的,因为读取失败可能有很多原因,而cin对各种原因都是适用的。

    注意:cin.get()的重载类型返回的是一个char类型(或者说是int型编码),而函数cin.get(ch)返回的是cin对象,这二者之间的区别要注意一下。

(2)利用cin.get()来检测文件结尾的方法(检测文件结尾的另一种方法)

    采用cin的函数cin.get(),比如a=cin.get();将会将读取的字符赋值给a,当读到EOF时,将EOF赋值给a(此时a应是一个int型),一般EOF的值为整型-1,而要输出时,此时a应该要进行强制类型转换char(a)才能输出为字符。

     这里还要注意的是,cin.get(a);这个语句是不会将EOF赋值给a的,这个语句返回的是一个cin对象,因此cin.get(a).get(b);这样的语句是可以被允许的。

(3)cin.clear()可以重置输入流的状态。

    当我们希望被模拟的EOF阻断继续的时候,我们需要用cin.clear()来重置输入流,此时缓冲区的内容依然存在,而failbit位和eofbit位,badbit位将会重新设置成0。然后如果需要的话我们再次使用cin.ignore()来忽略第一个字符(或者用cin.get()来吃掉一个字符)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 5,678评论 0 6
  • 浅谈C++常用输入输出 在编写C++程序的时候,经常因为输入输出头疼,所以在这里做一个小结,记录一下常用的输入输出...
    MinoyJet阅读 9,142评论 0 6
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,955评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,202评论 0 10
  • (二)字符串 c++有两种类型的字符串,一种是基于c语言的,另一种是c++中的string类(严格来说strin...
    阿厉a_li阅读 3,142评论 0 25