2

ユーザー入力を得るためにあなたの助けが必要です。
ユーザーにスペースを含む文字列を入力してもらいたい。cin>>variable間にスペースがあると問題がうまくいかないため、使用できません。私が使用するgetline(cin,string_variable)と、正しく動作します。しかし、問題なく動作させるには 2 回入力する必要があります。

cout<<"Enter movie name";
getline(cin, mvName);
getline(cin, mvName);

これよりもユーザー入力を取得するためのより良い方法はありますか、または getline を 2 回入力するのではなく、他に入力するコードはありますか? アドバイスをお願いします。

4

5 に答える 5

7

in >> valueたとえば、 using を使用してフォーマットされた入力とフォーマットされていない入力を切り替える場合std::getline(in, value)、興味のない空白を消費したことを確認する必要があります。この場合、おそらく前の入力からのバッファに改行があります。先頭の空白に興味がない場合、最も簡単な方法は次のようなものを使用することです。

if (std::getline(std::cin >> std::ws, mvName)) {
    process(mvName);
}

ところで、入力が成功したことを常に確認する必要があります。

于 2012-10-04T08:53:16.290 に答える
2

以下を使用しても問題はありませんでした:

char mvName[32];

cin.getline(mvName, 32);

そして、私はそれを一度だけ呼び出す必要がありましたが、これも問題ありませんでした。

于 2012-10-04T08:48:17.480 に答える
1

\nプロンプトメッセージを追加するのを忘れているかもしれません。

cout<<"Enter movie name:\n";

ただし、空の行をスキップする場合は、次のようにします。

// skip empty lines
while (cin >> mvName && mvName.empty());
// here mvName contains non empty string or it is empty because of error in reading
....
于 2012-10-04T08:50:14.337 に答える
1

質問には改行文字が含まれていないので、Enterキーを押して"Enter movie name"質問から下に移動すると思いますか?これにより、に空白行が挿入されstdin、最初の行getline()が読み取られ、次に2番目の行getline()が入力されたテキストを読み取ります。

最初の改行文字を入力する必要をなくすには、それを質問の文字列リテラルに追加するだけです。

std::cout<< "Enter movie name:\n";
于 2012-10-04T08:51:05.493 に答える
0
cout<<"Enter movie name";
  getline(cin, mvName);

正常に動作します!

スペース、エンターなどgetline(cin, mvName);の文字を最初に入力したため、2回使用しなければならなかった可能性があります.getline(cin, mvName);

于 2012-10-04T09:21:43.703 に答える