2

ユーザー入力からdoubleのベクトルを作成したいと思います。これらのコード行は、2つの場合を除いて、一般的に私が望んでいることを実行します。さらにある場合は、私に知らせてください。2つのケースは、小数点以下2桁以上の場合と、スペースが1つ以上ある場合です。小数点以下第2位はスペースとして機能します。したがって、ユーザーがこれを入力すると、0.2.0.1または0.2 0.1の場合、両方のインスタンスで小数点以下2桁が得られ、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 に答える