8.1本文参考书籍C++Primer 5th,这个专栏主要分享我的学习笔记与总结,以及课后题答案。
#include8.3#include using namespace std; istream& f(istream& is) { int i; while(!is.eof() ) { is >> i; if(is.bad()) { // 读写出错 throw runtime_error("error IO"); } if(is.fail()) {//不是int cerr << "not int continue transform" << endl; is.clear(); is.ignore(100,'n'); //把回车之前的n清除掉 continue; } cout << i << endl; } is.clear(); return is; } int main () { f(cin); return 0; }
读取到无效数据的时候
需要一个txt文件
#include8.7#include #include #include using namespace std; void read_vs(vector &vs) { ifstream ifs; ifs.open("8.4.txt",ios::in); string line; if(ifs.fail()) { cout << "fail open the file" << endl; return; } while(!ifs.eof()) { getline(ifs, line); // 按行存储 如果想按单词村 可以用 while(ifs >> line) vs.push_back(line); } } int main () { vector vs; read_vs(vs); for(auto it : vs) { cout << it << endl; } return 0; }
加上这个 知识点 用 char * 设置为文件名 方便保存!!
#include8.10#include #include using namespace std; istream & f(istream& in) {//输出对象 string s; while (in >> s,!in.eof()) { if(in.bad()) { throw runtime_error("not IO"); } if(in.fail()) { cerr << "continue cin " << endl; in.clear(); in.sync(); continue; } cout << s << endl; } in.clear(); return in; } int main () { ostringstream s; s << "CPT newBeef" << endl; istringstream in(s.str()); f(in); return 0; }
做过类似的 不做 了 答案如下
#include#include #include #include #include using namespace std; struct PersonInfo { string name; vector phones; }; string format(const string &s) { return s; } bool valid(const string &s) { return true; } int main () { string line, word; //分别保存来自输入的一行和单词 vector people; //保存来自输入的所有记录 while(getline(cin,line)){ PersonInfo info; // 张三 18170991111 李四 18611118668 王二 13022228888 // 0108431123 13877776666 // @阿⻄拜-南昌 07918888888 istringstream record(line); record >> info.name; while( record >> word) info.phones.push_back(word); //保存他们 people.push_back(info); } ostringstream os; for(const auto &entry:people){//对people中每一项 ostringstream formatted,badNums; //每个循环步创建的对象 for(const auto &nums:entry.phones){ if(!valid(nums)){ badNums<<" "< 感谢阅读



