自学C++笔记之cin

说来惭愧,控制理论与控制工程研究生毕业,本科期间学过C,学过汇编,但都是基础,工作了才发现,当时学的可能就是足够让自己能会看书,知道编程大概是怎么回事。是的,大概是怎么回事,究竟怎么回事,我是不知道的。才毕业,心血来潮想学C++,刚开始学,便发现,它与C不说大相径庭,也差不多到那程度了,至少我觉得是。废话不说了,来干货,引用的地方我标注了出处连接。

cin

看似简单,实则包罗万象。基本语句上的用法就不说了,说说我自从编程的几天里遇到的问题,虽说也是一些皮毛,还是写在这,养成一个习惯吧。

<1>C++ Primer 4里面的习题6.16:

在对vector<int>进行赋值操作时,是模仿着3.3.2里面的while(cin>>word)方式,赋值末尾给一个非int型变量,这样就结束了while循环体,目的是达到了,可是对下一次赋值操作时,怎么也不行了。抓着这个问题,问过同学,方便嘛,有个同学解答的很完善,其实网上这些答案是有的

(http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html),很基础,写在这里做个归纳。

cin的输入原理------程序的输入都建有一个缓冲区(我刚好学过单片机,老掉牙的51,那里面倒是也提到过BUFFER的概念,有点印象,不难理解)这个就是输入缓冲区,外设的输入过程是把输入开始到结束这一部分的数据,先存放到输入缓冲区里面,cin函数是从输入缓冲区里面取数据。这个很容易理解。(要是这个都不理解,那我在这做个不恰当的比方,就好比---快递员是cin,派送点是Buff,拉货的是输入,拉货的把货拉到派送点,而不是直接给快递员,中间过了一手的)

这里就要注意了,既然cin是从buff里面取数,那么也就是说,只要buff里面有数,它就取啊取啊,不取干净不算完。取完了才进行下一轮。还有就是,取的时候,是有标志位来表示当前cin的状况。如果要求输入的int,实际给一个char或者string,那么这个时候,cin会处于异常情况,大概是这样,比如用‘t’来作为上面提到的while终止条件,cin要取的是int的变量,结果缓冲区是个char,不取了,可是't'还在缓冲区,没拿走,等下一次再用cin的时候,如果还要取int,那么sorry,里面这个't'还在。对于异常的什么什么处理,我还没学到,只是翻看一下,还不会。还有就是,异常的时候,cin的状态已经报错了,具体的知识点可以参考C++ Primer 4里面的8.2,我也是后来看见了才恍然大悟,IO流处于无错误的状态时,才能使用输入输出。

解决方案---清除错误cin.clear(),这里是清除错误的标志位,缓冲区还有东西呐,接着再来,清空缓冲区,cin.ignore(),不过这个ignore只清空一位(我用代码做测试是这样,如果有了解的更深入的大神,小弟欢迎指正),括号里面具体写啥,我的建议是F1,看手册。

<2>幕课网里面的视频初始string那一节:

这里面涉及到一个getline函数,我呢,就是用代码验证了上面所说的缓冲区的事,发现,getline这个函数,cin.getline(&c[0], 3, '3');这句话,比如我输入1234,c里面只有12,可是缓冲区里面没有3,有一个4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值