C++:如何读取分离变量,然后读取向量

C++ : how to read to separate variables and then to vector?

本文关键字:读取 变量 分离 然后 向量 C++ 何读取      更新时间:2023-10-16

拥有这个:

#include <iostream>
#include <vector>
#include <istream>
using namespace std;
void read_vector(istream &in, vector<double> &vec)
{
if (in) //check wheter !in.fail() => but how can "cin" have error status??
{
vec.clear(); //also, clear the vector (general function)
double tmp;
while (in >> tmp)
{
vec.push_back(tmp);
}
in.clear(); //should be there any error?
}
}
int main()
{
double a, b;
vector<double> vec;
while (cin >> a >> b)
;
read_vector(cin, vec);
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << ' ';
}
cout << endl;
return 0;
}

我编译并尝试给出测试值:

$./a.out 
$1.2 3.4 5.6 7.8
$

无输出。1.2应保存到变量a3.4应保存到可变b,其余存储到向量(通过函数read_vector(。我认为由于它是在while()中,所以istream的布尔条件仍然成立。

  1. 使istream为false的条件是什么(我知道错误的值、EOF或其他信号(。

  2. 请举例说明good()fail()bad()operator booloperator!->根据https://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

  3. 但是不可能有";错误的";值(或其他类型的double(-cin将如何识别停止输入操作数(ab(,使cin出错,然后继续执行下一个函数read_vector(因此它最终将填充矢量,我可以从for循环中看到结果(

while (cin >> a >> b)
;

这读取到CCD_ 18和CCD_。

然后它再次读入CCD_ 20和CCD_。

…并且它继续这样做,直到流中的数据用完为止。

那是因为你把它放在一个循环中。

不出所料,在循环结束后(通过cin设置其错误位(,您无法提取更多数据。清除错误位是可能的,但您仍然没有更多的数据可读取。

我不认为你是想在这里兜圈子;只需写入:

cin >> a >> b;