0

重複の可能性:
getline() のヘルプが必要

getline 関数を cin と組み合わせて使用​​してキーボードから入力を取得しようとしていますが、私のコードは getline ステートメントをスキップし、代わりに以下の cin 関数に進みます。これが私のコードと何が起こっているかのスクリーンショットです。

ここに画像の説明を入力

void addmovie(ofstream& MovieContentsFile) {

string movieTitle;
int movieQuantity;

cout << " \n Add Movie Selected \n " << endl;

cout << "Please type in the movie title and press enter \n" << endl;

getline(cin,movieTitle, '\n');

cout << "Movie: " << movieTitle << "Please type in the amount of copies we have of this movie \n " << endl;

cin >> movieQuantity;

なぜこれが起こっているのか、そして今後それを回避する方法を教えていただければ幸いです

4

2 に答える 2

3

cin >> something末尾の改行をバッファに残しますが、これは次のコマンドでは無視されますcin >> something_else(おそらく、これがメニュー オプションの読み方です)。ただし、空白を無視せずに、バッファ内の次の改行までのすべてgetlineを取得します。つまり、この場合は何も得られません (まあ、改行文字だけです)。

一般に、両方を混在させて使用しないことをお勧めします。

編集:明確にgetlineするために、バッファから最後の改行を削除しますが、string.

于 2012-09-27T13:33:42.717 に答える
1

これは、改行文字がまだバッファ内にあるためです。そのため、getline に到達すると、それを認識してスキップします。これを回避するcin.ignore(25, "\n")には、前の行に次のようなものを配置できます。これは、改行に到達するまで25文字を無視し、それも取得します。

于 2012-09-27T13:40:40.300 に答える