用cin输入

来源:互联网 发布:java path设置方法技巧 编辑:程序博客网 时间:2024/06/05 14:20

用cin输入


cin从输入流中抽取字符,需要转换为相应的类型


可以将hex,oct,dec与cin一起使用


cin>>如何检查输入

cin>>抽取字符时,会跳过空白字符(空格,制表符,换行符)
也就是说,'\n'、空格啥的不会读取到
如果类型不匹配,cin>>停止抽取


流状态

cincout均包含一个描述流状态的数据成员。
流状态由三个元素组成:eofbit,badbit,failbit
三个全为0时,说明一切顺利
流状态详情:C++PrimerPlus page-756

  • 设置状态

    clear()setstate()可以设置状态,但有区别:
    clear(0)clear(goodbit)将所有三个状态设置为0
    clear(eofbit)设置eofbit,其他状态则被清除
    setstate(eofbit)设置eofbit,其他状态不变

  • I/O和异常

    cin.exceptions()有两个版本:

    1. iostate exceptions() const;
    2. void exceptions(iostate except);
      第一个版本返回流状态的一个bitmask,可以通过这个bitmask判断属于那种错误
      第二个版本中参数except,比如设置为eofbit,则当输入时eofbit被设置后,将会触发ios_base::failure异常。默认为goodbit,也就是说,不设置的话,即使有输入错误,也不会触发ios_base::failure异常
  • 流状态的影响

    如果存在cin失败,会导致后面的输入输出关闭,知道标记被清除
    cin.clear()可以清除标记,将标记变为goodbit
    但是导致错误的输入还保留输入流里
    可以while循环cin.get()读取直到'\n'
    也可以cin.ignore()做到同样的效果

  • 其他istream类方法

    1. 字符输入

      • istream & get(char & ch)
        读取下一个输入的字符,包括空白字符('\n',空格,制表符),返回istream类,说明可以这样:
        cin.get(ch1).get(ch2) >> ch3 ;
        遇到EOF,返回false
      • int get(void),获取一个字符,将其转化为整型,并返回
        遇到EOF,返回EOF
    2. 字符串输入

    函数 区别 getline(char *, int ) 分界符默认为'\n' getline(char *, int ,char ) 最后一个参数标志分界符| get(char *, int ) 分界符默认为'\n' get(char *, int ,char ) 最后一个参数标志分界符|

    getline()get()的区别:

    • 区别一:
      get()函数将'\n'留在输入流中
      getline()函数读取'\n',然后扔掉
    • 区别二:
      超过最大字符数时:
      getline()使用setstate()设置failbit
      get()不会设置,可以用peek()了解
    • 区别三:
      输入空行时:
      getline()读取'\n'然后丢掉,字符串为空
      get()设置failbit
  • 其他istream方法

    • read() 读取指定数目的字节,存储在指定位置。不会再末尾添上'\n'。通常与ostreamwrite()结合使用,用于文件的输入输出
    • peek() 返回输入流中下一个字符,但不会抽取输入流中的字符
    • gcount() 返回最后一个非格式化读取字符串的函数所读取的字符数目
    • putback() 将一个字符放回至输入流
0 0
原创粉丝点击