2014-11-05 19 views
0

在C中,我可以使用getch()獲取輸入,而不需要用戶按Enter鍵。 在C++中是否存在執行getch()函數的標準函數。我不想使用conio.h或其他平臺特定的庫。如何在不按Enter且沒有getch()或getche()的情況下讀取C++中的字符?

while (choice!='q') 
{ 
    cout << "Enter a six digit number(0 to 999999)"; 
    cin >> input; 
    start.controller(input); 
    cout << "Press r to repeat\nPress q to quit"; 
    cin >> choice; 
} 

我只是想重複這個過程,直到用戶按q。現在用戶必須按ENTER鍵。

+2

不,標準庫不提供此功能。 – 2014-11-05 07:37:57

+0

@remyabel猜猜我必須讓用戶按ENTER鍵! – 2014-11-05 07:44:54

+0

您不必使用特定於平臺的庫。有些圖書館涵蓋的平臺比您可能關心的要多。當然,他們這樣做是通過抽象出平臺的具體細節。但標準庫也是如此。 – 2014-11-05 07:47:11

回答

1

這在一定程度上覆蓋的C++ FAQ馬歇爾克萊因:

[15.17]我怎麼能告訴{如果一個鍵,鍵}的 用戶按下ENTER鍵之前按下了?

這不是一個標準的C++功能 - C++甚至不需要你的系統 有一個鍵盤!這意味着每個操作系統和供應商都會有所不同。

有關特定安裝的詳細信息,請參閱編譯器附帶的文檔 。 (順便說一下,UNIX上的進程通常有兩個步驟:首先將終端設置爲單字符模式,然後使用select()或poll()來測試是否按下了一個鍵。能夠適應這一 代碼)

C++標準還表示§1.9 [intro.execution]:

1在本國際標準的語義描述限定 參數化非確定性抽象機。該國際標準沒有要求符合 實施的結構。尤其是,他們不需要複製或模擬抽象機器的結構。相反,需要符合實現 以模擬(僅)抽象機器的可觀察行爲,如下所述。

8上的一致性實現的至少要求是:

      — [..]

      —交互式設備的輸入和輸出動態應發生在程序等待輸入之前實際提供提示輸出的方式。 構成交互式設備的是實現定義的。

2

否。標準C++庫不包含任何類型的終端管理。它甚至不假設你的終端除了線路之外還有任何輸入能力。你需要一個能夠理解你的特定終端如何工作的庫或代碼。

+0

所以我必須使用像conio.h或ncurses.h等平臺相關的庫......對吧?感謝您的答案,否則我會吉普在谷歌搜索! – 2014-11-05 07:42:45

+1

@NidhinDavid你必須使用一個能夠理解你所使用的特定終端的庫,因爲終端是不同的。 – 2014-11-05 07:43:15

相關問題