我希望用户输入vector<double> a_
的值,直到不会读取双值。我想制作一个名为b_
的双精度矢量,其大小取决于a_
的大小,实际上它完全相同。 b_
的初始化必须接近a_
init。但是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
答案 0 :(得分:1)
我通过评论添加了一些解释:
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>>的行为,
如果提取失败,则将零写入值并设置failbit。如果提取结果的值太大或太小而不适合值,则写入std :: numeric_limits :: max()或std :: numeric_limits :: min()并设置failbit标志。
设置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
答案 1 :(得分:0)
格式化提取失败后,cin.fail()
将返回true
。除非failbit
cout << "A size = " << a_.size() << endl;
std::cin.clear();
std::cin.ignore();
for(int i = 0; i < a_.size(); i++) {
cin >> tmp;
b_.push_back(tmp);
}
。
此外,由于错误值仍在输入流中,您需要.clear()
它:
signingConfigs{
unsigned{
storePassword = ""
keyAlias = ""
keyPassword = ""
}
}
答案 2 :(得分:0)
cin使用&#34;失败&#34;标志内部标记输入失败,返回空指针,以便&#34;而&#34;可以注意到它。所以你需要在第一次 cin&gt;&gt; tmp 之后使用 cin.clear()来重置&#34;失败&#34; cin的旗帜。
你不应该在&#34;中使用 cin&gt;&gt; tmp 作为&#34;循环,因为你希望每次读取数字。
这是一个有效的代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<double> a_, b_;
double tmp;
while(cin >> tmp) {
a_.push_back(tmp);
}
cin.clear();
cout << "A size = " << a_.size() << endl;
for(int i = 0; i < a_.size(); i++) {
do {tmp = cin.get();} while (tmp=='\n');
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
a
b
c
你会得到
A size = 3
a[0] = 4 b[0] = 97
a[1] = 5 b[1] = 98
a[2] = 6 b[2] = 99