返回 istream&对象以检查条件
Returning istream& object to check if condition
我现在读的书建议在read()
函数中返回istream&
,以便能够写出这样的东西
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;
}
std::iostream
对象如std::cin
可以在bool上下文中使用来报告是否处于错误状态
你的while
循环在in
进入错误状态时结束,比如你试图读取一个随机单词作为double
。
在循环之后,返回相同的in
对象,在if
上下文中使用,并再次被计算为false
,因为它的状态在退出循环后没有改变。
当跳出以下循环时,从函数返回:
while (in >> c)
s.push_back(c);
}
当in
处于使if (in)
为假的状态时,循环中断。
您将需要一种不同的方法来测试read
是否成功。例如
- 如果
r
有一个或多个值,则认为read
成功。 - 如果
r
的值大于等于10,则认为read
成功。
相关文章:
- 检查C++中的条件
- 如何在C++中使用 HRESULT 条件检查
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 如何在多个 Catch2 测试用例中检查相同的条件
- 对于检查 >=0 终止条件时的循环索引类型
- "is defined"宏检查及其调用必须处于不同的条件下吗?
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- 如何检查条件是否为 true 5 秒?
- C++未检查条件语句
- 通过检查条件并重新检查来获取锁定
- if 语句正在检查什么条件
- GDB在断点检查条件时失败
- 在 do-while 循环中初始化字符串将在检查条件之前跳转到它
- 虽然循环不检查条件,如果没有语句
- 将泛型子类上的检查条件分派到只知道基类的上下文中
- 循环中没有检查条件,但循环仍然终止C++
- template非类型参数:在编译时检查条件
- 返回 istream&对象以检查条件
- C++ - 返回循环开始而不检查条件
- 返回语句检查条件