41

ユーザーが cin コマンドで何も入力せずに単に Enter キーを押したかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

58

std::cinから読み取る場合、ストリーム抽出演算子 を使用しないことをお勧めし>>ます。これは、あらゆる種類の厄介な副作用を引き起こす可能性があるためです。たとえば、次のコードがある場合:

std::string name;
std::cin >> name;

と入力するJohn Doeと、読み取り元の行cinは値を保持するだけで、将来の読み取り操作で読み取られるようJohnに残ります。Doe同様に、私が書くとしたら:

int myInteger;
std::cin >> myInteger;

次にと入力するとJohn Doecinエラー状態になり、エラー状態を明示的にクリアしてエラーの原因となった文字をフラッシュするまで、今後の読み取り操作を拒否します。

ユーザー入力を行うより良い方法は、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(ほとんどの場合、章の最後にあります)。これがどれほど役立つかはわかりませんが、参考になる場合はリンクを投稿したいと思います.

お役に立てれば!

于 2011-02-15T03:49:09.763 に答える
4

ユーザーが少なくとも1文字を入力しない限り、cinはプログラムを続行しません(Enterはカウントされません)。ユーザーが入力を行わない場合、cinはユーザーが入力を行うのを待ち続け、Enterキーを押します。

于 2011-02-15T03:42:46.633 に答える
-6

シンプルな方法 >>

{
char X=0; //  ASCII( 0 ) means a NULL value
cin>>X;
if(X==0 || X==10) // ASCII( 10 ) means ENTER
cout<<"User din't enter ANYTHING !! ";
}

しかし、簡単な問題は....

cin では、文字を入力せずに先に進むことはできません

ここでの文字は、DIGIT、アルファベット、または特殊記号を意味し、スペースではなく、null などを入力してください

これで問題が解決することを願っています。解決しない場合は、お知らせいただければ幸いです。

于 2011-02-15T06:03:40.790 に答える
-7
int main(){ 
string str[100];
std::cout<<"Hello how are you ? \n";
std::cin>>str;
if(str.length() > 0){
// If input is seen
}
else{
// If input is not seen
}
}

問題があれば教えてください。

于 2011-02-15T03:42:35.567 に答える