scanf和cin的返回值
需要连续从标准输入读取数据时,可以采用下面两种不同的方式判断文件结束:
- int i;
- while(scanf("%d",&i) != EOF){do whatever...}
- while(cin >> i){do whatever...}
首先看scanf,当成功读取时返回读取的项的数目,如:scanf("%d %d",&i,&j)返回2,scanf("%d %f %s",&i, &f, c)返回3。这个数目可以是你希望读取的项数,也可能小于希望读取的项数,在匹配失败时返回0(如:用scanf("%d",&i)接收整数而输入是英文字母时就返回0)。需要注意的是用while(scanf("%d",&i) != EOF)时,接收到像876652098643267843超过int型取值范围的数时循环也会继续执行;相同的情况出现在while(cin >> i)上时循环会立即结束。
cin >>返回值的类型是basic_istream&,代表cin的地址。在ios.h文件中定义了类型转换函数:
- operator void *() const { if(state&(badbit|failbit) ) return 0; return (void *)this; }
有这个函数定义后,需要时ios类型转换成void*类型。而在读入发生错误时返回0。
在对一个流对象进行I/O操作发生错误时,错误的类型被记录在ios类的一个数据成员中。
ios类中定义的描述错误状态的常量:
       goodbit-------------没有错误,正常状态 
       eofbit---------------到达流的结尾 
       failbit---------------I/O操作失败,清除状态字后,可以对流继续进行操作。 
       badbit--------------试图进行非法操作,清除状态字后,流可能还可以使用。 
       hardfail------------致命错误,不可恢复的错误。 
对应于这些位,可用ios中定义的如下函数来检查流的当前状态位:
       int good()---------如果正常,返回非0值
       int bad()-----------如果badbit被设置,返回非0值
       int eof()------------如果eofbit被设置,返回非0值
       int fail()------------如果failbit被设置,返回非0值
       int rdstate()------返回当前错误状态位.
scanf和cin的返回值的更多相关文章
- 新手关于C++ cin 的返回值
		cin是C++的标准输入流,其本身是一个对象,并不存在返回值的概念. 不过经常会有类似于 while(cin>>a) 的调用,这里并不是cin的返回值,应该关注">> ... 
- cin的返回值
		例: int main() { int a,b; while(cin >> a >> b) cout << a+b << endl; } 首先,cin是 ... 
- c语言scanf返回值
		1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); 如果 ... 
- 关于"cin>>"输入成功或失败时的“返回值”(转载)
		今天在看c++primer的时候,读到其中这样一段话: When we use an istream as a condition, the effect is to test the state o ... 
- scanf printf函数返回值
		1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); ... 
- printf与scanf的返回值、注意点
		printf()的返回值为其输出字符串常量的字符数(注意字符数与字数的区别)注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符). scanf()函数返回成功读入的项目的个数 ... 
- 关于scanf的返回值
		今天写一个小程序时误用while(scanf("%d",&b)!=a),以为scanf的返回值就是输入的值. 其实真相是: scanf返回接收到的变量值的个数. int a ... 
- scanf返回值问题
		在家养病,闲着没事看C primer plus,看到书中对于scanf输入的判断,常用如下方法: 此时它将返回1视为我输入成功,如果不为1则视为输入失败.那到底scanf的返回值具体指的是什么呢? 例 ... 
- 关于scanf函数的返回值问题
		如: scanf("%d%d",&a,&b); 1.如果a和b都被成功读入,则scanf的返回值为2 2.如果只有a被成功读入,那么返回值为1 3.如果a和b都未被 ... 
随机推荐
- Eval,Bind,<% %>,<%# %>和<%= %> 笔记
			1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ... 
- [转]基于fiddler的APP抓包及服务端模拟
			在HTTP接口的测试过程中,一般我们会按照如下的步骤进行: 1)测试环境的准备 2)HTTP消息体的构造 3)HTTP消息的发送及断言 如果我们可以拿到项目组的接口文档,并且HTTP后台服务是可以工作 ... 
- 44.Android MD5Util
			44.Android MD5Util public class MD5Util { public static String getMD5String(String key) { char hexDi ... 
- 安卓编译出错: Process 'command 'C:\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 1 解决!
			安卓编译出错: Process 'command 'C:\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 1 解决! ... 
- F - Monkey Banana Problem
			F - Monkey Banana Problem Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & ... 
- Win7程序运行出现Windows Based Scrip Host 已停止工作问题的解决方法
			最近在使用类似于Teamviewer这样的程序时,突然运行不了,报错:Microsoft Windows Based Scrip Host 已停止工作的问题,从系统日志来看,好像是空指针问题,但是又无 ... 
- 【HTML5开发系列】CSS3
			选择器 属性 背景和边框 盒模型 布局 文本 动画 其他 
- maven3 org.codehaus.plexus.classworlds.launcher.launcher 找不到或无法加载主类
			maven3 org.codehaus.plexus.classworlds.launcher.launcher 找不到或无法加载主类 嗯,网上很多资料说是路径的问题,确实是有可能是路径的问题,而且还 ... 
- Oracle视图传递参数
			在Oracle里,视图不像存储过程和函数一样,可以定义输入参数,但我们可以变个方式,使用程序包来实现. oracle package: oracle package是oracle包,是一组相关过程.函 ... 
- ABAP下载服务器文件到本机
			转自http://blog.sina.com.cn/s/blog_701594f40100l8ml.html ABAP:下载服务器文件到本机 对服务器的文件进行读写操作,SAP提供了OPEN DATA ... 
