2017-09-26 68 views
0

在一個需要一個字符並打印相應的ASCII值的程序中。如何檢測用戶是否進入空格鍵?

空格鍵的ASCII值是:'32'。

但如果我按空格鍵,然後輸入鍵,程序仍然等待輸入,並沒有得到空格鍵字符識別。

#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

控制檯輸入通常由操作系統或庫緩衝,直到按下Enter鍵纔會傳送到您的程序。 –

+1

他說他按下輸入 – pm100

+1

upvoted,這是一個完全有效的問題與工作代碼。我們還需要什麼 – pm100

回答

6

默認情況下,"formatted input" functionsstd::istream首先跳過所有空格字符。

如果你只是想第二天字符是否是空白或沒有,你可以使用未格式化的輸入功能get

std::cin.get(ch); 

它也可以修改流,使得它永遠不會跳過空格,使用std::noskipws

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

但需要注意的是,除非你再將該標誌復位到其原來的值,該標誌將將保持std::cin對象上設置,這可能會搞亂試圖到u等功能就這樣吧。

+0

啊,這是我正在尋找的頁面。我必須保存它。 +1 – scohe001

+1

@ scohe001在我的愚見中,從cppreference.com開始有幫助,而從cplusplus.com開始從未有過。 – aschepler

+0

低,看到它是在提取操作符的cppreference頁面確實指定行爲與空白。我的眼睛已經打開了! – scohe001

0

我實際上並不能似乎找到它的任何地方寫在 docs,但提取運算符( <<)忽略前導空格和讀取儘可能多的字符,因爲它可以直到找到一個空白字符。

編輯:

貌似cppreference頁面提取運營商實際上並規定對於空白的行爲:「構建和檢查崗哨對象,它可以跳過前導空白後,提取字符並存儲它「

因此,對於你來說,空間和換行符會被吃掉,並且提取操作符繼續等待,因爲它沒有讀取任何非空白字符。

如果要讀取單個字符(空格或不空格),請使用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++,你應該用static_cast,而不是C風格的鑄造見我上面的代碼的例子。)

相關問題