从while(cin>>a)开始探讨cin
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的更多相关文章
- cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())
		在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" iostr ... 
- (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)
		说明:流输入运算符,在一定程度上为C++程序的开发提供了很多便利,我们可以避免C语言那种繁琐的输入格式,比如在输入一个数值时,还需指定其格式,而cin以及cout则不需要.但是cin也有一些缺陷,比如 ... 
- 注意当cin.getline、和cin 合用的时候
		1. getline有两种,一个是string的(getline(cin,s)),一个是istream的(cin.getline(s,maxsize,delim)). 2. 当用cin输入了数据后,在 ... 
- cin的使用问题
		#cin的使用问题 cin输入类型不匹配的情况: #include<iostream> using namespace std; void main() { int i = 0; whil ... 
- c++ cin>>详解
		参考地址:http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当 ... 
- cin与cout详解
		输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用" ... 
- c++之cin/cin.get/cin.getline()详解
		C++输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取.cin,cin,get(),cin.getline()三个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的(如 ... 
- C++输入cin详解
		输入原理: 程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据 ... 
- while(cin.eof)出错 poj
		zoj遇到c++如何判定输入流结尾的问题,一不小心就超时了 楼下的代码可以通过zoj #include<iostream> using namespace std; int main(){ ... 
随机推荐
- NOI2010 : 超级钢琴
			求出前缀和 对于每个结尾i,设现在取的区间是[j+1,i],则i-R<=j<=i-L,取出该区间sum[j]的最小值,将sum[i]-sum[j]放入堆中 建立一个大根堆,每次取出堆顶元素 ... 
- Jexus & Mono 迁移
			具体案例: 问: 这个是现在微信公共平台的进三月请求数合计 如果迁移到 Mono & Jexus 需要注意那些? 因为微信需要的是5秒响应,服务号存在时段高峰值,在峰值上,一台服务器能否 ... 
- 【BZOJ】 1007: [HNOI2008]水平可见直线(凸壳)
			http://www.lydsy.com/JudgeOnline/problem.php?id=1007 一开始我贪心的写了下,当然全wa了.. 这题看了题解感觉很简单. 首先什么情况才能看到呢? w ... 
- wc2016总结
			因为我太弱了,高一才第一次来wc. 前几天讲课,被各种小学微积分和初中高等代数虐,简直naive.只好自己做做bzoj,想着练练模板之类的东西. 考试当天自觉状态不错,翻开试题感觉各种神奇(这难道是串 ... 
- sqlserver常用日期、时间函数和格式
			Sql Server中常用的日期与时间函数1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 ... 
- git客户端初始化
			安装git客户端:[root@super67 ~]# yum install -y git 配置git信息:[root@super67 ~]# git config --global user.nam ... 
- 分布式架构高可用架构篇_05_fastdfs集群的安装
			参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ... 
- yii2 debug工具条不出现
			UrlManger美化后,debug工具条不出现,禁用UrlManager出现 
- MySQL数据库安装,配置My.ini文件
			最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySql所以在配置的时候出现了一些问题,该篇 ... 
- Myeclipse 多版本共存
			Myeclipse2015 stable2.0 和Myeclipse10 共存的解决办法: 1. 准备内容: 1) myeclipse-2015-stable-2.0-offline-installe ... 
