gpt4 book ai didi

c++ - 尝试读取失败后 cin 读数为零

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:39 25 4
gpt4 key购买 nike

我希望用户输入 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

LIVE

关于c++ - 尝试读取失败后 cin 读数为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com