2012-09-08 46 views
0

我正在使用ncurses進行一個小型控制檯遊戲。在主菜單中,我希望用戶能夠設置控制鍵。現在據我所知,在ncurses你可以訪問e.a. a-key由char'a'的int值組成。使用「a」鍵遊戲可以完美地工作,但是我堅持使用菜單:從int到char的轉換以顯示ncurses鍵綁定

對於每個鍵綁定,我都存儲了一個默認爲e.a的int值。 '一個'。當遊戲開始時,我從int值正確讀取'a'綁定,並可以使用它遊戲。但是,它顯示不正確。我希望它是這樣的:「左:a」。我這樣做:

std::string key = "Left: " + static_cast<char>(_value); 

_value是我存儲和初始化爲'a'的int值。我也試過沒有演員,順便說一句。

現在顯示的內容很奇怪。它代替「a」表示「〜T^C」。對於字母「s」和「d」,它根本不顯示任何內容。 「w」變成一些很奇怪的編碼問號。

我想這與int-values或其他字符的編碼有關。那麼我能做些什麼才能讓它以正確的方式顯示?

非常感謝!

+0

如何聲明'_value'?請注意,「a」(單個字符)和「a」(短字符串)具有完全不同的含義。 –

+0

爲什麼使用int來映射鍵? –

回答

2

您正在將字符串文字的地址和_value的ASCII值加在一起。字符串key然後構造從那個垃圾地址發生的任何事情。

請記住,字符串文字是N const char的數組類型,並且當傳遞給函數和運算符等時,數組會衰減爲指向其第一個元素,這會產生const char*。內置的+指針運算符不會執行字符串連接。您需要爲至少一個操作數構造一個std::string以供重載的操作員使用:

std::string key = std::string("Left: ") + static_cast<char>(_value); 
+0

謝謝你做到了!哇,我仍然需要學習很多關於這樣的細節。 – cpury