了解“cin”

一.预备知识

cin对象cin是一个 istream 类的对象,是一个标准的输入流对象,属于std空间中。
缓冲区:用来暂时存储数据的地方的。

二.“cin”与“缓冲区"

cin主要用于从标准输入(通过键盘的输入)读取数据,而标准输入的数据,先会先进入缓冲区cin 则从缓冲区读入数据,是有先后顺序的,先输入的先读取,读取完一个上一个数据才到下一个。

三.“cin”的常见用法

  1. cin>>
  2. cin.get
  3. cin.getline

下面我们分别介绍几种用法规则

四.“cin>>”

cin>> val; 与 cin.operator>>(val);等价,这是istream类的一个运算符重载,具体是怎么实现的我们不用管。这里需要注意的是,cin>>在读取缓冲区中的数据时,遇到 [回车]、[空格]、[TAB] 会视为无效数据,通过清除的方法来忽略掉它,等待有效数据的到来。
代码段:

#include <iostream>
int main()
{
    int i;
    char c;
    std::cin>>i>>c;
    std::cout<<i<<" "<<c;
    return 0;
}

键盘输入: [回车][回车][回车] 10000 [空格] C [回车]

运行结果:在这里插入图片描述可以看到,cin>> 并没有读取前三个 [回车] ,而是将将三个 [回车]缓冲区删除;输入的10000,从缓冲区赋给i,而后10000就从缓冲区删除;接着输入的空格 cin>> 也不读取,所以也是从缓冲区将他删除,并把下一个输入C赋值给c,赋值完后从缓冲区删除。

五.“cin.get”

cin.get有多个重载,但我们常见的有:

cin.get(char);等价于val=cin.get(); //这里的val为char类型
cin.get(char *,string_length);

第一种,是读取单个字符;第二种,是读取一个字符串
下面我们分别介绍它们:

1.读取单个字符:

代码段:

#include <iostream>
int main()
{
    char c1,c2;
    std::cin.get(c1);
    std::c2=cin.get();
    std::cout<<c1<<" "<<c2<<"-_-";
    return 0;
}

—情况 1—
键盘输入: a [回车]
运行结果:
在这里插入图片描述代码中定义了两个char变量c1,c2,接下来应该输入两个字符,在一行中显示,并还有一个 -_ - ,所以结果应该是:字符c1 字符c2-_-
但是输出的结果甚至转行输出了。因为在这里,第一个cin.get() 将读取到的字符a赋值给c1后,用户敲击 [回车] 键来转行,这是第二个cin.get() 就将[回车]存入了c2,所以就没有了玩家的第二次输入,直接到了cout语句,接下来程序也正常打印c1c2,只是c2转行符(\n),然后输出 -_ -

—情况 2—
键盘输入:a [空格][空格][空格][回车]
运行结果:
在这里插入图片描述
在这里我们将之前的 [回车] 换成了 [空格] ,在输入a以后,被正常赋给c1,但再接下来输入的三个 [空格] ,其中只有一个 [空格] 被赋给了c2,但还可以继续输入数据,这些都将存入缓冲区,之所以能继续输入的原因是, [空格] 被转换为 (\t) ,而回车被转换为 (\n)cin对象以(\n)为结束,当读取到(\t),并不会停止继续读入数据。所以这里关于为什么能一直输入也就说得过去了。实际上还有两个 [空格] 存留在第一行的缓冲流中。 其实关于 缓冲流,又有很多需要学习的,这里不过详细讲解。(因为我也不知道…)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值