2

我想根据用户输入制作一个双精度向量。这些代码行通常做我想让他们做的事情,除了两种情况,如果还有更多,请告诉我。这两种情况是如果有两个或多个小数位,如果有一个或多个空格。第二个小数用作空格。因此,如果用户输入: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 double\n";
        scoresVector.push_back(0);
        cin.clear(); 
        cin.ignore();
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    }
}
4

1 回答 1

3

有更好的解决方案来处理逐行输入,但它们都需要一些额外的代码。最简单的方法是使用字符串流读取一行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 double\n";
    scoresVector.push_back(0);
  }
}
于 2012-11-15T17:47:23.907 回答