1.

首先cin>>a返回的是左操作数,也就是返回cin。

cin的条件状态中: cin.eof()    判断流是否到达文件的结束符

         cin.fail()    判断IO操作是否失败

在while(cin>>a)中看流是否还能用,主要是判断 cin.fail()  的取值。事实上,无论是否用于while循环,流必须处于无错误状态才能用于输入和输出 ,也就是cin.fail() 必须为0值,程序以下的cin操作才能正常执行。

导致cin.fail() 为1的操作有:输入坏值 或 遇到文件结束符(ctrl+z)

当cin.fail() =1时,可以设置cin.clear()将流中的所有状态值设为有效状态,以下操作就会正常输入输出了,否则再遇到cin就不能正常读入赋值。

2.

关于while(cin>>a)中输入值是用 “空格” 间隔还是用 “回车” 间隔的问题:

while(cin)中有个缓冲机制规定,只有收到回车键,才会将所有输入的数据一次提交到输入处理函数cin里,而这个输入过程,在按下回车之前,是不受cin控制的。

对于正常的输入,用回车和空格没有差别,关键是我们最后往往要输入个ctrl+z来结束输入,这里要特别注意,ctrl+z之前必须要按“回车”,不能是空格,也不能什么都不按。

正确的顺序是:“正常值输入(以空格或回车间隔都可以)”、“回车”、(ctrl+z)、“回车”。这样在缓冲机制下while(cin)循环就会把ctrl+z作为输入流单独进行判断,cin.eof()为真,即遇到正常的文件结束符,否则,while(cin)循环判断时以为ctrl+z和之前的空格是一起的或者和之前的其他输入是一起的,认为是输入了坏值,认为没有遇到正常的文件结束符。

这样理解对吗,欢迎批评指正!

从while(cin>>a)开始探讨cin的更多相关文章

  1. cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())

    在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" iostr ...

  2. (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)

    说明:流输入运算符,在一定程度上为C++程序的开发提供了很多便利,我们可以避免C语言那种繁琐的输入格式,比如在输入一个数值时,还需指定其格式,而cin以及cout则不需要.但是cin也有一些缺陷,比如 ...

  3. 注意当cin.getline、和cin 合用的时候

    1. getline有两种,一个是string的(getline(cin,s)),一个是istream的(cin.getline(s,maxsize,delim)). 2. 当用cin输入了数据后,在 ...

  4. cin的使用问题

    #cin的使用问题 cin输入类型不匹配的情况: #include<iostream> using namespace std; void main() { int i = 0; whil ...

  5. c++ cin>>详解

    参考地址:http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当 ...

  6. cin与cout详解

    输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用" ...

  7. c++之cin/cin.get/cin.getline()详解

    C++输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取.cin,cin,get(),cin.getline()三个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的(如 ...

  8. C++输入cin详解

    输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据 ...

  9. while(cin.eof)出错 poj

    zoj遇到c++如何判定输入流结尾的问题,一不小心就超时了 楼下的代码可以通过zoj #include<iostream> using namespace std; int main(){ ...

随机推荐

  1. NOI2010 : 超级钢琴

    求出前缀和 对于每个结尾i,设现在取的区间是[j+1,i],则i-R<=j<=i-L,取出该区间sum[j]的最小值,将sum[i]-sum[j]放入堆中 建立一个大根堆,每次取出堆顶元素 ...

  2. Jexus & Mono 迁移

     具体案例: 问:  这个是现在微信公共平台的进三月请求数合计 如果迁移到 Mono & Jexus 需要注意那些?  因为微信需要的是5秒响应,服务号存在时段高峰值,在峰值上,一台服务器能否 ...

  3. 【BZOJ】 1007: [HNOI2008]水平可见直线(凸壳)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1007 一开始我贪心的写了下,当然全wa了.. 这题看了题解感觉很简单. 首先什么情况才能看到呢? w ...

  4. wc2016总结

    因为我太弱了,高一才第一次来wc. 前几天讲课,被各种小学微积分和初中高等代数虐,简直naive.只好自己做做bzoj,想着练练模板之类的东西. 考试当天自觉状态不错,翻开试题感觉各种神奇(这难道是串 ...

  5. sqlserver常用日期、时间函数和格式

    Sql Server中常用的日期与时间函数1.  当前系统日期.时间    select getdate() 2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值  ...

  6. git客户端初始化

    安装git客户端:[root@super67 ~]# yum install -y git 配置git信息:[root@super67 ~]# git config --global user.nam ...

  7. 分布式架构高可用架构篇_05_fastdfs集群的安装

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  8. yii2 debug工具条不出现

    UrlManger美化后,debug工具条不出现,禁用UrlManager出现

  9. MySQL数据库安装,配置My.ini文件

    最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySql所以在配置的时候出现了一些问题,该篇 ...

  10. Myeclipse 多版本共存

    Myeclipse2015 stable2.0 和Myeclipse10 共存的解决办法: 1. 准备内容: 1) myeclipse-2015-stable-2.0-offline-installe ...