我希望用户输入 vector<double> a_
的值直到没有 double 值被读取。我想制作一个名为 b_
的 double vector 它的大小取决于 a_
的大小,其实是一模一样的。 b_
的初始化必须靠近a_
在里面。但是 b_
有一些问题,我不明白。 b_
的所有值都设置为 0。
代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<double> a_, b_;
double tmp;
while(cin >> tmp) {
a_.push_back(tmp);
}
cout << "A size = " << a_.size() << endl;
for(int i = 0; i < a_.size(); i++) {
cin >> tmp;
b_.push_back(tmp);
}
for(int i = 0; i < a_.size(); i ++) {
cout << "a[" << i <<"] = " <<a_[i];
cout << " " <<"b[" << i <<"] = " <<b_[i] << endl;
}
return 0;
}
输入是:
4
5
6
e
7
8
9
输出是:
A size = 3
a[0] = 4 b[0] = 0
a[1] = 5 b[1] = 0
a[2] = 6 b[2] = 0
最佳答案
我通过评论添加了一些解释:
while(cin >> tmp) {
a_.push_back(tmp); // read 4, 5, 6 and push_back them
} // the loop ends when extraction fails for reading e
...
for(int i = 0; i < a_.size(); i++) {
cin >> tmp; // extraction fails for reading e everytime,
// and tmp will be set to 0.0
b_.push_back(tmp); // push_back 0.0 everytime
}
注意根据std::basic_istream::operator>>的行为,
If extraction fails, zero is written to value and failbit is set. If extraction results in the value too large or too small to fit in value, std::numeric_limits::max() or std::numeric_limits::min() is written and failbit flag is set.
设置failbit后,如果想继续阅读,需要清除failbit并丢弃导致错误的字符。如:
// ...
cin.clear();
cin.ignore();
for(int i = 0; i < a_.size(); i++) {
cin >> tmp;
b_.push_back(tmp);
}
// ...
然后输入:
4
5
6
e
7
8
9
你会得到
A size = 3
a[0] = 4 b[0] = 7
a[1] = 5 b[1] = 8
a[2] = 6 b[2] = 9
关于c++ - 尝试读取失败后 cin 读数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956092/