跳到主要内容

cin的输入特性

cin的输入特性

引言

在某次作业中,要求输入一段带空格的字符串。但是在我用cin尝试输入这行字符串的时候,却发现空格离奇消失了。也就是:

std::cin >> string_a;
std::cout << string_a;

输入: t e s t
输出: test

在多方搜索后,总结如下

摘要

C++中的cin是一个 istream对象,从标准输入中读取数据,在iostream头文件中定义。

条件状态

IO流有四种条件状态,分别用位来控制

s.eof()//s为流的对象;如果s的eofbit置位,则返回ture
s.bad()//若s的badbit置位,则返回ture
s.fail()//若s的failbit或badbit置位,则返回ture
s.good()//若s处于有效状态,则返回ture

这个流的状态可以被重置。

s.clear() //将流s中所有状态位复位,将流的状态设置为有效。返回void

数据读取方式

cin从缓冲区读取数据,有多种方式

1. >>

  • 根据后面的变量的类型读取数据
  • 读取时结束条件:enter, space, tab
  • 对结束符的处理:丢掉

2. get

  • 输入结束条件:换行符

  • 对结束符处理:不丢掉

     cin.get(c1);  

    PS:cin.get()只是读取字符,即使输入数字,也是char型,再转换为int型。

3. getline()

getline读取一行,以换行符结束,丢掉换行符。 接收一个字符串,可以接收空格并输出,需包含#include <string> 还可指定读取多少个字符到数组,读取完后剩余的字符放在流中,流被置为无效状态,可以通过置换使他们变有效,然后继续读取。

cin之后使用getline会出现空行,调用cin.ignore()即可

解决方案

这里直接使用cin.getline()输入就行了。