读书人

关于源和文件求解!

发布时间: 2012-10-20 14:12:48 作者: rapoo

关于流和文件,求解!!
#include <iostream>
#include <stdexcept>
#include <fstream>
using namespace std;
istream& get(istream& cin);
int main()
{
get(cin);
cin.clear();
return 0;
}
istream& get(istream& in)//已输入流作为参数
{
int ival;
while(cin>>ival,!in.eof())//第一次输入数字和字母正确输出正确,但是第二次就会出错,why??
{
if(in.bad())
throw runtime_error("IO stream corrupted");
if(cin.fail())
{
cerr<<"bad data,try again"<<endl;
in.clear();
in.ignore(200,' ');//不要这句会陷入死循环,why??
continue;
}
ofstream outfile;//想建立一个文件,将输入的内容写入文件,但是这里老是提示说有错误。
outfile.open("out.txt");
if(!outfile)
{
cerr<<"error:unable to open the file out.txt."<<endl;
break;
}
else
outfile<<ival<<ends;//
//getchar();
}
return in;//返回流,但是不太懂是什么意思!!求解答!!
}


[解决办法]

C/C++ code
#include <iostream>#include <stdexcept>#include <fstream>using namespace std;istream& get(istream& cin);int main(){    get(cin);    cin.clear();      return 0;}istream& get(istream& in)//已输入流作为参数  {    int ival;      while(cin>>ival,!in.eof())       //我觉得如果用cin流的话,循环不能退出吧    {        if(in.bad())            throw runtime_error("IO stream corrupted");        if(cin.fail())        {            cerr<<"bad data,try again"<<endl;            in.clear();            in.ignore(50,'\n');    //得取走流中的出错的数据,应该用回车符做结束,即读到回车符,结束忽略            continue;        }        ofstream outfile;                    // 我这里没有提示出错        outfile.open("out.txt");        if(!outfile)          {            cerr<<"error:unable to open the file out.txt."<<endl;            break;        }        else            outfile<<ival<<ends;//        //getchar();    }    return in;        //返回流,可以放入连等式中 就向 cin >> a >> b; 这里也可以写get(cin) >> a;}
[解决办法]
in.ignore(200,' ');//不要这句会陷入死循环,why??

ignore 从缓冲区读了200 个字符,或者读到空格就结束。也就是清除上次输入的数据,你上次的数据都不清楚,肯定会永无休止,陷入死循环了

读书人网 >C++

热点推荐