我正在阅读的这本书建议在istream&
函数中返回read()
,以便能够写出类似这样的内容
if (read(cin, some_container)) {...}
然而,当我尝试这段代码时,无论如何,我的函数总是返回false。问题在哪里?
#include <iostream>
#include <vector>
using namespace std;
istream& read(istream& in, vector<double>& s)
{
if (in)
{
in.clear();
double c;
while (in >> c)
s.push_back(c);
}
return in;
}
int main()
{
vector<double> r;
if (read(cin, r))
cout << "success" << endl;
else
cout << "false returned" << endl;
return 0;
}
答案 0 :(得分:0)
当你突破以下循环时从函数返回:
while (in >> c)
s.push_back(c);
}
当in
处于if (in)
为假的状态时,该循环会中断。
您需要采用不同的方式来测试read
是否成功。例如
r
有一个或多个值,请考虑read
成功。r
有10个或更多值,请考虑read
成功。答案 1 :(得分:0)
std::iostream
个std::cin
can be used in a bool context对象报告是否处于错误状态。
while
循环在in
进入错误状态后结束,例如,如果您尝试将随机字作为double
读取。
循环之后,返回相同的in
对象,在if
上下文中使用,并再次评估为false
,因为它退出循环后状态没有改变