zoj遇到c++如何判定输入流结尾的问题,一不小心就超时了

楼下的代码可以通过zoj

#include<iostream>
using namespace std;
int main(){
int a,b;
while(true){
cin>>a>>b;
if(cin.eof()){//换成fail(),或是good()也可以通过
break;
}
int sum=a+b;
cout<<sum<<endl;
}
return 0;
} 这里也可以通过
#include<iostream>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
    int sum=a+b;
    cout<<sum<<endl;
    }
    return 0;
}  
楼下的代码无法通过
#include<iostream>
using namespace std;
int main(){
int a,b;
while(cin.eof()){//无法通过zoj
cin>>a>>b; int sum=a+b;
cout<<sum<<endl;
}
return 0;
}

话说到底是因为什么呢,oj的测试用例我没有猜到,在这里找到一些想法 http://stackoverflow.com/questions/13343991/c-why-cin-eof-read-last-char-twice

在这里我得到一些启发

http://blog.chinaunix.net/uid-27034868-id-3758629.html

这是一个读取文件的例子

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main(){
char data;
ifstream infile;
infile.open("in.txt");
if(infile.fail()){
cout<<"fail to open"<<endl;
return 1;
}
while(1){
infile>>data;
if(infile.eof()){//注意这里 将循环结束的条件设置在读完一次数据后面,如果将判断条件放在while里面
break;
}
cout<<data;
} /*while(!infile.eof()){//这样的话 文件的最后一个字符将输出两次 比如in.txt="aaa" 那么标准输出将会是aaaa四个
明明使用了eof()判断了,为什么还是这样的呢 原因是这样的,因为eof()发现读到文件结束标志EOF时并不会立刻返回而是比较后知后觉(这段话摘自楼上给的链接的博客,话说我没有账号,不过觉得这种想法是错误的,根据单步调试的结果来看一旦infile接受了eof就会触发eofbit,也即
判断成功结束循环)
        infile>>data;
        cout<<data;
    }*/
infile.close();
cout<<endl;
return 0;
}

while(cin.eof)出错 poj的更多相关文章

  1. POJ 1386&&HDU 1116 Play on Words(我以后再也不用cin啦!!!)

    Play on Words Some of the secret doors contain a very interesting word puzzle. The team of archaeolo ...

  2. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员 ...

  3. C++中cin的用法汇总

    cin可以用于接收输入,最常见的是从控制台接收.在刚学习C++的时候经常会用cin来接收数据,这里想要系统的总结一下cin的用法,保证不灌水. C++中的cin是一个 istream对象,从标准输入中 ...

  4. cin中函数的作用

    cin是istream类的对象,它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符">>"从流中提取数据.流提取符">>"从流 ...

  5. 关于fflush、缓冲区、scanf、EOF等问题真麻烦

    1.为什么 fflush(stdin)是错的 http://u637.springnote.com/pages/6288463.xhtml(已经bad request了) 首先请看以下程序: #inc ...

  6. 从while(cin>>a)开始探讨cin

    1. 首先cin>>a返回的是左操作数,也就是返回cin. cin的条件状态中: cin.eof()    判断流是否到达文件的结束符 cin.fail()    判断IO操作是否失败 在 ...

  7. 关于if (!cin)以及while (cin >> word)

    首先注意: 1.每一个输入(输出)对象就代表一个输入(输出)流: 2.输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit.badbit.failbit三个标记位均为0时表示流 ...

  8. POJ 2250 Compromise (UVA 531)

    LCS问题.基金会DP. 我很伤心WA非常多.就在LCS问题,需要记录什么路. 反正自己的纪录path错误,最后,就容易上当. 没有优化,二维阵列,递归打印,cin.eof() 来识别 end of ...

  9. poj 2585 Window Pains 解题报告

    Window Pains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2027   Accepted: 1025 Desc ...

随机推荐

  1. 获取url中指定的参数

    function GetRequest(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(& ...

  2. 如何用 SQL Tuning Advisor (STA) 优化SQL语句

    在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等.在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning ...

  3. C++ 系列:多线程编程基础知识

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  4. C++ 系列:设计模式研究

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  5. 配置比对脚本(python)

    # -*- coding: utf- -*- from datetime import * import MySQLdb import sys import time import datetime ...

  6. UWP学习记录4-设计和UI之控件和模式1

    UWP学习记录4-设计和UI之控件和模式1 1.控件和事件简介 在 UWP 应用开发中,控件是一种显示内容或支持交互的 UI 元素. 控件是用户界面的构建基块. 我们提供了超过 45 种控件供你使用, ...

  7. java相关的小问题

    对线程异常的处理 调用Thread的静态方法Thread.setDefaultUncaughtExceptionHandler()

  8. Good Bye 2016 - D

    题目链接:http://codeforces.com/contest/750/problem/D 题意:新年烟花爆炸后会往两端45°差分裂.分裂完后变成2部分,之后这2部分继续按这种规则分裂.现在给你 ...

  9. 复利计算器(软件工程)及Junit测试———郭志豪

    计算:1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算 ...

  10. 压力测试相关之ab命令

    1. 短时压力测试工具 ab 命令(apache的工具) 关键指标: Requests per second:    98.52 [#/sec] (mean)      ###平均每秒的请求数 Tim ...