2017-01-19 11 views
1

charの簡単な入力を検証しようとしていますが、charを入力せずにenterを押すと、文字が入力されるまでコンソールに空白行が表示されます。私は入力キーを無効な入力として受け入れ、空の行に行くのではなく、検証に進みたいと思います。charを入力するときにEnterキーを無視する

cout << "Enter room type. (S)tandard or (P)remium: "; 
char roomType; 
cin >> roomType; 
while (cin.fail() || roomType != 's' && roomType != 'S' && roomType != 'p' && roomType != 'P') 
{ 
    cin.clear(); 
    cin.ignore(80, '\n'); 
    cout << "Error. Enter room type again: "; 
    cin >> roomType; 
} 
cin.ignore(80, '\n'); 
cin.clear(); 
return roomType; 
+0

@KeeganHeffernan以下の回答を更新しました。それがあなたのために働くかどうかを確認してください(私にとってはうまくいく)。 –

答えて

0

*****

再び私の答えを編集した私はそれが改行文字を入力するためのエラーメッセージを出力していない理由として解決策を見つけました。明らかに、この行:

cin.ignore(80, '\n'); 

問題の根本的なものです。 whileループの条件では、改行文字を違反として扱い、エラーメッセージを出力することになっています。しかし、一方で、上記の行はwhileループの条件に違反しているかどうかをチェックすることなく改行文字を無視するようにコンパイラに指示します。コンパイラが条件に違反しているかどうか、または他の目的のために改行文字を受け入れるように、この行を削除する必要があります。それは、コードの違いの多くを作っていなかったが、私はあなたかどうかわからなかったので、私はまたcin.clear()関数をコメントアウト、ちなみに

// Example program 
    #include <iostream> 
    #include <conio.h> 

    using namespace std; 

    int main() 
    { 
     cout << "Enter room type. (S)tandard or (P)remium: "; 
     char roomType; 
     roomType = _getch(); 
     while (cin.fail() || (roomType != 's' && roomType != 'S' && roomType != 'p' && roomType != 'P') || (roomType == '\n')) 
     { 
      //cin.clear(); 
      cout << "\nError. Enter room type again: "; 
      roomType = _getch(); 
      cout << roomType; 
     } 
     //cin.clear(); 
     cout << "\n\nSuccess" << endl; 
     return 0; 
    } 

:私は以下のコードを更新しましたコード内にその行があるかどうかを確認する必要がありました。 cinが改行文字をキャッチできなかったので、私はまだ_getch()関数に固執しました(cinと_getch()を使って試しましたが、後者のみが働いていました)

あなたがその違いを知りたい場合は、_getch )はキーロガーと呼ばれ、ユーザーが改行ボタンを押すのを待つのではなく、ユーザーがキーボードでヒットしたすべての単一キーを記録し、変数に格納します。その結果、上のコードで改行文字をキャッチすることができました。 ファイルの一部です。あなたは_getch()関数についての任意のより多くの情報が必要な場合は、このサイトを参照してください。これは、今、あなたのために働く必要があり

_getch, _getche

。それでもあなたのために働かない場合は、コメント欄に私に知らせてください。

+3

もっと理解しやすい ''\ n''を使うことができるときに' 10'をたたくだけの理由は?それはあなたに説明を惜しまないでしょう。 – DeiDei

+0

どちらの方法も正しいです。 –

+2

はい、コードレビューに合格するのは1人だけです。 – user4581301

関連する問題