三生石@ 2011-04-09 12:49 采纳率: 100%
浏览 252
已采纳

为什么循环内部的条件被认为是错误的?

I just found a comment in this answer saying that using iostream::eof in a loop condition is "almost certainly wrong". I generally use something like while(cin>>n) - which I guess implicitly checks for EOF, why is checking for eof explicitly using iostream::eof wrong?

How is it different from using scanf("...",...)!=EOF in C (which I often use with no problems)?

转载于:https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong

  • 写回答

4条回答 默认 最新

  • 妄徒之命 2011-04-09 12:58
    关注

    Because iostream::eof will only return true after reading the end of the stream. It does not indicate, that the next read will be the end of the stream.

    Consider this (and assume then next read will be at the end of the stream):

    while(!inStream.eof()){
      int data;
      // yay, not end of stream yet, now read ...
      inStream >> data;
      // oh crap, now we read the end and *only* now the eof bit will be set (as well as the fail bit)
      // do stuff with (now uninitialized) data
    }
    

    Against this:

    int data;
    while(inStream >> data){
      // when we land here, we can be sure that the read was successful.
      // if it wasn't, the returned stream from operator>> would be converted to false
      // and the loop wouldn't even be entered
      // do stuff with correctly initialized data (hopefully)
    }
    

    And on your second question: Because

    if(scanf("...",...)!=EOF)
    

    is the same as

    if(!(inStream >> data).eof())
    

    and not the same as

    if(!inStream.eof())
        inFile >> data
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试