需要连续从标准输入读取数据时,可以采用下面两种不同的方式判断文件结束:

[cpp] view plaincopy

 
  1. int i;
  2. while(scanf("%d",&i) != EOF){do whatever...}
  3. 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文件中定义了类型转换函数:

[cpp] view plaincopy

 
  1. 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的返回值的更多相关文章

  1. 新手关于C++ cin 的返回值

    cin是C++的标准输入流,其本身是一个对象,并不存在返回值的概念. 不过经常会有类似于 while(cin>>a) 的调用,这里并不是cin的返回值,应该关注">> ...

  2. cin的返回值

    例: int main() { int a,b; while(cin >> a >> b) cout << a+b << endl; } 首先,cin是 ...

  3. c语言scanf返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b); 如果 ...

  4. 关于"cin>>"输入成功或失败时的“返回值”(转载)

    今天在看c++primer的时候,读到其中这样一段话: When we use an istream as a condition, the effect is to test the state o ...

  5. scanf printf函数返回值

    1. scanf 函数是有返回值的,它的返回值可以分成三种情况  1) 正整数,表示正确输入参数的个数.例如执行 scanf("%d %d", &a, &b);   ...

  6. printf与scanf的返回值、注意点

    printf()的返回值为其输出字符串常量的字符数(注意字符数与字数的区别)注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符). scanf()函数返回成功读入的项目的个数 ...

  7. 关于scanf的返回值

    今天写一个小程序时误用while(scanf("%d",&b)!=a),以为scanf的返回值就是输入的值. 其实真相是: scanf返回接收到的变量值的个数. int a ...

  8. scanf返回值问题

    在家养病,闲着没事看C primer plus,看到书中对于scanf输入的判断,常用如下方法: 此时它将返回1视为我输入成功,如果不为1则视为输入失败.那到底scanf的返回值具体指的是什么呢? 例 ...

  9. 关于scanf函数的返回值问题

    如: scanf("%d%d",&a,&b); 1.如果a和b都被成功读入,则scanf的返回值为2 2.如果只有a被成功读入,那么返回值为1 3.如果a和b都未被 ...

随机推荐

  1. IIS 实现一个主机部署多个网站 共享80端口

    如果一个主机只是建立一个80端口的网站就有点浪费了,通过本文你就可以实现,在一个主机上建立多个80端口的站点,并通过不同的域名进行访问. 打开iis软件:控制面板-->管理工具-->Int ...

  2. SetTimer时间间隔的问题

    1.用WM_TIMER来设置定时器   SetTimer函数的原型 UINT_PTR SetTimer( HWND hWnd,                      // 窗体句柄 UINT_PT ...

  3. 【Python + Selenium】之JS定位总结

    感谢:小琰子 Python+Selenium 脚本中的一些js的用法汇总: 1.滚动条 driver.set_window_size(500,500) js = "window.scroll ...

  4. org.hibernate.type.SerializationException: could not deserialize 反序列化失败

    1.查看实体类有没有实现Serializable接口 例:public class Student implements Serializable { ***** } 2.看表中的字段有没有在实体中进 ...

  5. ztreeSearch

    $.fn.extend({ ztreeSearch : function(options) { // var _self=$(this); var defaults = { id : '', sear ...

  6. iOS开发之提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package

    iOS开发之提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploadin ...

  7. 解决ListView滑动上下出现阴影

    网上大部分说在listview的属性中通过设置android:fadingEdge="none"来解决问题,需要说明的是是在2.3版本之前有效! 方法一. public class ...

  8. 【BZOJ3784】树上的路径 点分治序+ST表

    [BZOJ3784]树上的路径 Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a< ...

  9. 基于SpringMVC国际化资源配置方式

    1.首先需要在spring-mvc-servlet.xml 中配置拦截器: <bean id="localeChangeInterceptor" class="or ...

  10. 牛人blog汇总

    1.天一思维: https://blog.csdn.net/tszty1997?t=1