zoukankan      html  css  js  c++  java
  • while(cin.eof)出错 poj

    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;
    }


  • 相关阅读:
    【HCIE-RS_TAC诊断5-2】
    【HCIE-RS_TAC诊断5-1】
    【HCIE-RS_TAC诊断4】
    【HCIE-RS_TAC诊断3】
    【HCIE-RS_TAC诊断2】
    华为ICT大赛辅导——双AC主备双链路备份
    shell 函数与内置变量
    CF505E Mr. Kitayuta vs. Bamboos
    CF559E Gerald and Path
    CF538H Summer Dichotomy
  • 原文地址:https://www.cnblogs.com/odin-luyu/p/5371771.html
Copyright © 2011-2022 走看看