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. 接触PHP快4个月

    就要下班了,接触php快4个月,掌握的不好,需要实战,看到自己博客空空的,就mark一下吧!下班了...

  2. 在ubuntu下安装google chrome

    由于手上有两台电脑,再加上我那个选择困难症加上纠结劲.所以果断把其中一台电脑只装linux系统,另一台电脑只装windows了.免得我老纠结!于是linux便选择了ubuntu. 由于浏览器一直用的是 ...

  3. 【笔记】读取properties文件

    package com.bshinfo.el.userInfo.util; import java.io.BufferedReader; import java.io.File; import jav ...

  4. mvc学习中的问题汇总

    问题1:更新条目时出错.有关详细信息,请参阅内部异常. 初学MVC,正好手上有别人搭建的一个框架.于是直接用了起来.一切似乎都很顺利. 列表页也正常读取了.可是在新增数据时,始终报如上的错.即使用了调 ...

  5. SQL语法和运算符(一)

    一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的记录(行). 一些最重要的SQL命令(SQL对大小写不敏感): 一.SQL语法 select:从数据库中提取数据 update:更 ...

  6. GRUB、MBR名词解释

    GRUB:是一个来自GUN项目的多操作系统启动程序,是多启动规范的实现,他允许用户在计算机内同时拥有多个操作系统,并在计算机启动时选择希望的操作系统.GRUB可用于选择系统分区上的不同内核,也可用于向 ...

  7. “div+css”下拉菜单

    <style> html, body { margin: 0; padding: 0; } .btn-group{ font-size: 14px; position: relative; ...

  8. PHP 版本判断 version_compare() 函数

    在度娘中简单的找了下,判断当前PHP的版本是否高于某个版本,或者低于某个版本的方法 显示的结果基本上都是一样的,好吧,要不是我忘记了version_compare()这个函数我才不会去找度娘,果断找以 ...

  9. python 新手遇到的问题

    作为新手,我把之前遇到的问题贴出来 错误提示1: TypeError: unbound method a() must be called with A instance as first argum ...

  10. DBNEWNAME工具介绍

    下面修改数据库的SID和db_name [root@oracle ~]# su - ora11g db11@oracle /home/ora11g$ db11@oracle  /home/ora11g ...