我想从用户输入中制作一个双精度向量。 这些代码行通常做我希望他们做的事情,除了两种情况,如果还有更多,请告诉我。 这两种情况是如果有两个或多个小数位,以及是否有一个或多个空格。 第二个小数点充当空格。 因此,如果用户输入以下内容:0.2.0.1 或 0.2 0.1,我将为两个实例获得两位小数,它们将是 0.2 和 0.1。 请帮我解决这个问题。 我想确保我正确地完成了这个简单的任务。 我在C++这样做。
欢迎任何其他建议。
for(int i = 0; i <= ARRSIZE; i++)
{
cout << "Please enter a decimal value: ";
if (cin >> sumScores)
{
scoresVector.push_back(sumScores);
cin.clear();
cin.ignore();
}else
{
cout << "This is not a doublen";
scoresVector.push_back(0);
cin.clear();
cin.ignore();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
}
有更好的解决方案来处理逐行输入,但它们都需要一些额外的代码。 最简单的方法是使用std::getline
读取一行并使用字符串流分析它们。
for (int i = 0; i <= ARRSIZE; i++) {
std::cout << "Please enter a decimal value: " << std::flush;
std::string s;
if (!std::getline(std::cin, s))
break;
std::istringstream is(s);
double d;
if (is >> d >> std::skipws && is.eof()) {
scoresVector.push_back(d);
} else {
std::cout << "This is not a doublen";
scoresVector.push_back(0);
}
}