流失败
题目描述
实现从标准输入读入空格分隔的整数的流 MyCin
。与 std::cin
不同的是,它在遇到整数 -1
时触发输入失败;从而在下方代码的 while
循环中退出。
关于输入
若干行。每行两个空格分隔的整数。整数中存在 -1。
关于输出
对于首次 -1 出现之前的所有输入行,原样原序输出它们。此外,不输出任何其它内容。
即,程序遇到 -1 输入时退出。
参考答案
#include <iostream>
class MyCin {
private:
bool fail;
public:
MyCin() : fail{false} {}
MyCin& operator>>(int& n) {
std::cin >> n;
if (n == -1) {
fail = true;
}
return *this;
}
explicit operator bool()const {
return !fail;
}
};
int main() {
MyCin m;
int n1, n2;
while (m >> n1 >> n2) {
std::cout << n1 << " " << n2 << std::endl;
}
// m << n1; // 编译错误
}
// 检查你是否正确解决了“m << n1 会通过编译”这个问题
template<typename,typename>struct J:std::
true_type{};template<typename T>struct J<
T, std::void_t<decltype(std::declval<int&
>()=std::declval<T&>())>>:std::false_type
{};static_assert(J<MyCin, void>::value);