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看到了换行符,然后就直接返回了。

  • 相关阅读:
    20180929 北京大学 人工智能实践:Tensorflow笔记02
    20180929 北京大学 人工智能实践:Tensorflow笔记01
    YOLOv3学习笔记
    编辑器上传漏洞
    IIS解析漏洞利用
    数据库备份及审查元素进行webshell上传
    burp suite 进行webshell上传
    BUGKU CFT初学之WEB
    CTFbugku--菜鸟初学
    理解PHP中的会话控制
  • 原文地址:https://www.cnblogs.com/easyFancy/p/3002243.html
Copyright © 2011-2022 走看看