// get.cc
# include "get.h"
std::istream& get(std::istream& in)
{
int ival; // 类型可以替换 可以修改成模板函数
while(in >> ival, !in.eof())
{
if (in.bad())
throw std::runtime_error("IO stream corrupted");
if (in.fail())
{
std::cerr << "bad data, try again" << std::endl; // 输入的类型不是int 报错
in.clear(); // 恢复到正常的流状态
in.ignore(200, '\n'); // 忽略错误数据 200个字符 或 换行
continue;
}
std::cout << "输入的数据" << ival << std::endl;
}
in.clear(();
return in;
}
// get.h
#ifndef _GET_H
#define _GET_H
#include <iostream>
std::istream& get(std::istream& in);
#endif
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
ifstream & open_file(ifstream &in, const string &file)
{
/* 安全的打开文件
* ifstream &in 文件流对象
* const string &file 文件名
*/
in.close();
in.clear();
in.open(file.c_str());
return in;
}
int main()
{
string fileName;
fileName = "test.txt"; // 文件名test.txt
ifstream inFile; // 文件流对象
if(!open_file(inFile, fileName)) //调用open_file函数
{
cout << "error: can not open file: " << endl;
return -1;
}
return 0;
}