1 条题解
-
15-何承哲 (938936) LV 9 MOD @ 2020-04-16 21:39:33
本题考察不定数目数据的读入,以及错误处理
注意语句cin.eof()
该语句判断的是你上一次读入的值是否为eof,而不是即将读入的值
所以要读入数据之后再进行eof判定,而不是判断了eof再读入
同理fail也是指上一次读入是否类型不匹配,而且一旦fail被置位,cin将无法进行后续读入,那次失败的读入内容将返回到输入流,直到进行clear后继续读入
所以在fail判定之后需要忽略该行剩余的读入内容,使用cin.ignore()#include<iostream> #include<iomanip> using namespace std; class Point { friend istream& operator>>(istream& c, Point& px); friend ostream& operator<<(ostream& c, Point px); friend Point operator+(Point a, Point b); private: int x, y; public: Point(int _x = 0, int _y = 0) :x(_x), y(_y) {}; }; istream& operator>>(istream& c, Point& px) { c >> px.x >> px.y; //判断范围,若超出范围则置位fail if (!c.fail()) if (px.x < -1000 || px.x>1000 || px.y < -1000 || px.y>1000) c.setstate(ios::failbit); return c; } ostream& operator<<(ostream& c, Point px) { c << '(' << px.x << ',' << px.y << ')'; return c; } Point operator+(Point a, Point b) { return Point(a.x + b.x, a.y + b.y); } int main() { Point pa, pb; while (!(cin >> pa >> pb).eof()) { if (cin.fail()) { cout << "Invaild input." << endl; cin.clear(); //忽略这一行后面的数据 cin.ignore(100,'\n'); } else { cout << pa + pb << endl; } } }
- 1
信息
- ID
- 1013
- 难度
- 2
- 分类
- (无)
- 标签
- 递交数
- 167
- 已通过
- 30
- 通过率
- 18%
- 上传者