12

cinユーザーが値を入力せずにプッシュENTERするだけで、cinこれが有効な入力として認識されるように、どのように使用するのか疑問に思いました。

4

5 に答える 5

15

あなたはおそらく試してみたいでしょうstd::getline

#include <iostream>
#include <string>

std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
于 2008-09-29T21:29:19.997 に答える
5

ユーザー入力std::getlineが非常にうまく機能することがわかりました。

これを使用して行を読み取り、読み取ったものを破棄することができます。

このようなことをすることの問題点は、

// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;

std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?

ユーザーが「4.5 - about」などの他のゴミを入力すると、同期が外れて、ユーザーが次回表示する必要があるプロンプトを出力する前に、最後に書いたものを読むのが非常に簡単になります。

ですべての完全な行を読み取りstd::getline( std::cin, a_string )、返された文字列を解析すると (たとえば、istringstream やその他の手法を使用して)、文字化けした入力に直面しても、表示されるプロンプトを std::cin からの読み取りと同期させることがはるかに簡単になります。

于 2008-09-29T21:27:12.140 に答える
2

cinを行います。getlineはあなたの問題を解決しますか?

于 2008-09-29T21:23:58.543 に答える
2

ユーザーが整数を入力するのではなく、Enter キーを押したことを検出するには、次のようにします。

char c;
int num;

cin.get(c);               // get a single character
if (c == 10) return 0;    // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c);      // else put the character back
cin >> num;               // get user input as expected

または:

char c;
int num;
c = cin.peek();           // read next character without extracting it
if (c == '\n') return 0;  // linefeed (Enter Key) so exit
cin >> num;               // get user input as expected
于 2015-03-13T03:43:06.080 に答える
0

cin のバッファリングを解除してみてください (デフォルトではバッファリングされています)。

于 2008-09-29T21:32:40.533 に答える