コンソールから2つの文字列、2つのint、および2つのユーザー入力パラメーターを取得しようとしています。私が使用しようとしている関連するコードはこれです:複数回呼び出したときにgetline()がコンソールからの入力を待っていません
#include <string>
#include <iostream>
using namespace std;
// ...
string inputString;
unsigned int inputUInt;
double inputDouble;
// ...
cout << "Title: ";
getline(cin, inputString);
tempDVD.setTitle(inputString);
cout << "Category: ";
getline(cin, inputString);
tempDVD.setCategory(inputString);
cout << "Duration (minutes): ";
cin >> inputUInt;
tempDVD.setDuration(inputUInt);
cout << "Year: ";
cin >> inputUInt;
tempDVD.setYear(inputUInt);
cout << "Price: $";
cin >> inputDouble;
tempDVD.setPrice(inputDouble);
プログラムを実行しているのではなく、入力された最初のinputStringから待っているときしかし、コードが第二のgetline()の呼び出しまでは停止しません。 。したがって、コンソール出力は次のようになります。
タイトル:カテゴリー:
をカテゴリ後に現れるカーソルで。私が今入力すると、プログラムは今年の入力にジャンプし、複数の文字列を入力することはできません。ここで何が起こっていますか?
を再現することはできませんを使用する前に、
かなど@kernald言及した使用
を使用することができます。本当の完全なコードを投稿してください。私はあなたの問題がどこかにあると確信しています。また、フォーマットされた入力と 'getline()'を混在させないでください。 –
@KerrekSB:それらを混ぜることは悪いスタイルの症状であることに同意しますが、それらを混ぜないという客観的な理由は何ですか?本当にそれらを混ぜることは完全に有効だと思います。 – sehe
@sehe:フォーマットされた抽出は改行を消費しないので、前の行のすべてをすでに処理したと考えて 'getline()'を実行すると、予期しない結果を得るのは非常に簡単です。私はそれが不可能だと言っているわけではありませんが、それはしばしばロジックを読みとって維持することを非常に困難にします。 –