将String转换为double,而string具有N个小数,C ++

时间:2012-11-15 17:33:33

标签: c++ user-input cin

我想从用户输入制作双打矢量。这些代码行通常是我希望他们做的,除了两种情况,如果还有更多,请告诉我。这两种情况是,如果有两个或更多小数位,并且如果有一个或多个空格。第二个小数作为空格。因此,如果用户输入: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'); 
    }
}

1 个答案:

答案 0 :(得分: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);
  }
}