2017-09-26 18 views
0

は、文字を受け取り、同等のASCII値を出力するプログラム内にあります。ユーザーがスペースバーに入ったかどうかを検出するにはどうすればよいですか?

スペースバーのASCII値は「32」です。

しかし、スペースバーを押してからEnterキーを押すと、プログラムはまだ入力を待っており、スペースバーの文字は認識されません。

#include <iostream> 

using namespace std; 

int main() 
{ 
    char ch; 


    cout << "Enter the character: "; 
    cin >> ch; 

    cout << "ASCII code is: " <<(int)ch << endl; 


    return 0; 

} 
+2

コンソール入力は、しばしばOSまたはライブラリによってバッファされ、Enterキーが押されるまでプログラムには配信されません。 –

+1

彼は彼が入力して – pm100

+1

upvoted、作業コードで完全に有効な質問を押したと言います。もっと何をしたいのですか – pm100

答えて

6

"formatted input" functionsstd::istreamのすべての空白文字をスキップします。

あなたはちょうどそれが空白だかどうかは非常に次の文字が必要な場合は、フォーマットされていない入力機能get使用することができます。これは、使用して、それは空白をスキップすることはありませんようにストリームを変更することも可能です

std::cin.get(ch); 

std::noskipws

std::cin >> std::noskipws >> ch; 

しかし、あなたはその古い値にそのフラグをリセットしない限り、フラグが台無しUにしようと他の機能を可能性std::cinオブジェクト、上の滞在をセットするだろうことに注意してくださいそれを見てください。

+0

私が探していたページがあります。私はそれを保存する必要があります。 +1 – scohe001

+1

@ scohe001私の謙虚な意見では、それはcppreference.comから始まり、cplusplus.comから始まることはありません。 – aschepler

+0

そして、それが抽出演算子のcppreferenceページにあったのを見て、空白で動作を指定しました。私の目は開かれている! – scohe001

0

私は実際にそれが docsのどこに書かれていますが、抽出演算子( <<)は先頭の空白を無視し、それは空白文字を見つけるまで、それは、できるだけ多くの文字を読み込み見つけるように見えることはできません。

編集:「先頭の空白をスキップすることが歩哨オブジェクトを、構築し、確認した後、文字を抽出します。抽出演算子のcppreferenceページが実際に空白に関して動作を指定しないように

が見えます"

空白文字以外の文字を読み取っていないので、空白と改行が食べられ、抽出演算子は待機し続けます。

1文字(空白かどうか)を読み取る場合は、getを使用してください。すなわち:

char ch; 

cout << "Enter the character: "; 
cin.get(ch); //can also be called ch = cin.get(); 
cout << "ASCII code is: " << static_cast<int>(ch) << endl; 

(また余談として - これは、C++であることから、あなたの代わりに、Cスタイルのキャストのstatic_castを使用する必要があります例えば、上記の私のコードを参照してください。)デフォルトでは

関連する問題