2011-05-19 35 views
0

我剛剛開始使用C++,並試圖找出如何檢測已按下的按鍵。我知道'a'的ASCII代碼是97.所以...簡單的'按鍵'程序

1)以下程序出了什麼問題?

#include <iostream> 
using namespace std; 

int main() 
{ 
char thing[1]; 

cin >> thing; 
if (thing == 97) 
    cout << "You pressed 'a'!\n"; 
return 0; 
} 

2)我怎樣才能讓這個而不必鍵入字母作爲輸入,然後按回車鍵,該程序只是立即接受該按鍵?

+0

你在Linux/Unix或Windows上嗎? – Jason 2011-05-19 15:35:55

回答

1

1)

cin >> thing 

,如果他們推入,因爲你只爲1個字符分配空間之前,按多於一個字符是不安全的。

而且,你要

if(thing[0] == 97) // ... 

2)沒有標準的方式。功能getch()適用於某些平臺。

+0

有 - 看看我的回答 – Dani 2011-05-19 15:22:20

+0

@Dani你的回答是錯誤的。 – 2011-05-19 15:24:27

0

使用函數_getch()爲您提供一個字符而不用等待輸入鍵。只需包含conio.h並使用它。

它適用於Windows,但在Visual C++中被列爲棄用。所以它是一種非標準的方式,不便攜。

#include <iostream> 
#include <conio.h> 

using namespace std; 

int main() 
{ 
    int character; 

    character = getch_(); 
    if (character == 97) 
     cout << "You pressed 'a'!\n"; 
    return 0; 
} 

如果你想返回按下的鍵和輸出的字符代碼壓到控制檯的角色,那麼你可以使用getche_()

3

我只是在C++

開始了

歡迎!我知道你會發現學習編程C++既困惑又愉快。我可以建議你先獲得一本好的C++書嗎?這裏有一本很好的書籍列表:The Definitive C++ Book Guide and List

1)以下程序出了什麼問題?

#include <iostream> 
using namespace std; 

你不應該導入整個std命名空間。在這個名字空間中有很多符號,並且在某些時候你幾乎肯定會碰到它們中的一個。我知道很多初學者教科書都會教你如何做到這一點。別。

int main() 
{ 
    char thing[1]; 

沒有理由聲明thing數組。它應該是char thing;

cin >> thing; 

因爲,當您這樣做時,您會創建緩衝區溢出錯誤。由於thing是一個數組,因此cin將把thing視爲C風格的字符串,並且愉快地將整個輸入行寫入它,即使它不適合。

if (thing == 97) 
    cout << "You pressed 'a'!\n"; 
  • (假設你沒有修復的thing定義),thing==97陣列進行比較,以恆定97.更具體地,所述陣列的所述第一元素的地址進行比較,以恆定97。這是一件壞事,甚至可能不會編譯。
  • (假設您修復了thing的定義),裸露的常量97令您的代碼讀者感到困惑,包括您自己。相反,將thing與同樣有效的積分常數'a'進行比較。

全部放在一起:

#include <iostream> 
using std::cout; 
using std::cin; 

int main() 
{ 
    char thing; 

    cin >> thing; 
    if (thing == 'a') 
    cout << "You pressed 'a'!\n"; 
    else 
    cout << "You pressed not-'a': " << thing << "\n"; 
    return 0; 
} 

2)我怎樣才能讓這個而不必鍵入字母作爲輸入,然後按回車鍵,該程序只是立即接受該按鍵?

正如其他人指出的那樣,您必須爲此使用特定於平臺的API。在Microsoft Windows上,嘗試getch()

+0

+1良好的細節和良好的建議。 – sje397 2011-05-19 16:10:43