zoukankan      html  css  js  c++  java
  • 再论cin 与getline

          很多书上,都很笼统的说,cin用于提取输入缓冲区的字符,且自动转换赋给接收的变量(如char 、int 、double等类型),以空白字符(blank、\n ,\t)作为分隔提取,getline用于提取整行数据,以换行符作为分隔。

         具体的说,cin在开始提取的时候,会跳过所有空白字符(blank,\n,\t),直到第一个非空白字符才开始提取,对于提取字符串(string类型)而言,然后就会一直提取直到遇到空白字符,结束提取。此时,空白字符不会被丢弃,仍然留在输入缓冲区内;对于其他类型(如int),则会一直提取到不属于该类型的字符截止。如果遇到类型错误,cin就会置failbit位为有效位1,然后返回。如果遇到文件结尾,就置eofbit位为有效位1,遇到I/O错误,就置badbit位为有效位1。上述三者可以重合。

        getline会直接提取,不做开始的检查,直到看到换行符(\n),然后停止提取,并且,将换行符从输入缓冲区中丢弃,这样,下一次提取就是换行符之后的数据。

        因此,当程序混合使用cin,getline读取数据时,特别是字符串,就要特别注意。

        比如假设cin读取字符串,看到换行符结束提取,然后又用getline提取时,就会得到一个空行,failbit位就会被置为有效位,就是因为getline看到了换行符,然后就直接返回了。

  • 相关阅读:
    【2020-07-04】人生十三信条
    【2020-07-03】人生十三信条
    【2020-07-02】人生十三信条
    【2020-07-01】人生十三信条
    【一句日历】2020年7月
    团队第三次作业评分 需求规格说明书
    软工评分工具
    中期成绩汇总
    软件工程第四次作业评分
    软件工程第五次作业评分
  • 原文地址:https://www.cnblogs.com/easyFancy/p/3002243.html
Copyright © 2011-2022 走看看