关于流和文件,求解!!
#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;//返回流,但是不太懂是什么意思!!求解答!!
}
[解决办法]
#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 个字符,或者读到空格就结束。也就是清除上次输入的数据,你上次的数据都不清楚,肯定会永无休止,陷入死循环了