ユーザーがcinコマンドで何も入力せず、単にEnterキーを押したかどうかを確認するにはどうすればよいですか?
std :: cin から読み取る場合、 ストリーム抽出演算子>>
を使用しないことをお勧めします。これにより、あらゆる種類の厄介な副作用が発生する可能性があります。たとえば、次のコードがある場合:
std::string name;
std::cin >> name;
John Doe
と入力すると、cin
から読み取る行に値John
が保持され、将来の読み取り操作でDoe
が読み取られるようになります。同様に、私が書く場合:
int myInteger;
std::cin >> myInteger;
そして、John Doe
と入力すると、cin
はエラー状態になり、エラー状態を明示的にクリアしてエラーの原因となった文字をフラッシュするまで、今後の読み取り操作を拒否します。
ユーザー入力を行うより良い方法は、 std :: getline を使用して、ユーザーがEnterキーを押すまでキーボードから文字を読み取ることです。例えば:
std::string name;
getline(std::cin, name); // getline doesn't need the std:: prefix here because C++ has ADL.
[〜#〜] adl [〜#〜] は、引数依存のルックアップを表します。ここで、John Doe
と入力すると、name
の値はJohn Doe
になり、cin
にはデータが残りません。さらに、これにより、ユーザーがEnterキーを押しただけかどうかもテストできます。
std::string name;
getline(std::cin, name);
if (name.empty()) {
/* ... nothing entered ... */
}
このアプローチを使用することの欠点は、フォーマットされたデータ行、int
またはdouble
を読み取る場合、文字列から表現を解析する必要があることです。ユーザーが何か無効なものを入力してcin
が失敗状態にならないようにする場合の対処方法をよりきめ細かく制御できるので、これは価値があると個人的に思います。
私はC++プログラミングコースを教えており、 ストリームライブラリに関するいくつかの講義ノート は、cin
からフォーマットされたデータを安全な方法で読み取る方法についてかなり詳細に説明しています(主に章の終わりに)。これがどれほど役立つかはわかりませんが、役に立つ場合はリンクを投稿すると思いました。
お役に立てれば!
ユーザーが少なくとも1文字を入力しない限り、cinはプログラムを続行しません(enterはカウントしません)。ユーザーが何も入力しなかった場合、cinはユーザーが入力するのを待ち続け、Enterキーを押します。