2011-01-05 40 views
0

如何在D中獲得鍵盤輸入?你是否必須使用標準的C函數,或者有沒有一種方法可以做到這一點?如何在D中獲取鍵盤輸入?

編輯:通過這個我的意思是在按鍵上獲得事件,就像用戶按下ESC時,不僅僅是來自stdin的文本輸入。

+2

你在操作什麼操作系統?你在建什麼樣的應用程序?命令行工具?基於GUI的? – 0scar 2011-01-06 09:48:55

回答

3

您將需要使用標準C函數。

雖然如果您使用的是GUI庫,那麼可能會綁定到關鍵事件。

+0

謝謝 - 我將在這個項目中使用SDL,但我想知道是否有辦法做到這一點。 – bfops 2011-01-06 12:10:54

2
// Reads stdin and writes it to stdout. 
import std.stdio; 

int main() 
{ 
    char[] buf; 
    while (stdin.readln(buf)) 
     write(buf); 
    return 0; 
} 

Source。希望這可以幫助!

4

stdinstd.stdio的全球變量。這是一個std.stdio.File。所以,幾乎所有可以在File上進行的操作都只能在閱讀時打開,您可以在stdin上進行操作。你是最有可能感興趣的是readln()readf()(兩者可以在不明確使用stdin被調用,readf()的兩個功能實際上是唯一的stdin而不是的File一部分,所以你不能它明確地使用stdin)。 readln()stdin中讀取一行。 readf()允許您讀取格式化輸入(類似於C中的scanf())。這個程序:

import std.stdio; 
import std.string; 

void main() 
{ 
    write("> "); 
    auto input = strip(stdin.readln()); 
    writeln(input); 

    write("> "); 
    float f; 
    readf("%f", &f); 
    writeln(f); 
} 

可能會導致以下:

>的Hello World
的hello world
> 2.7
2.7

所以,這是非常簡單的。就個人而言,我最有可能使用readln(),然後解析所得到的字符串(可能與std.conv.parse()),而不是使用readf(),但readf()顯然也有其用途。

如果你正在尋找從按鍵而不是僅僅是文本輸入的事件,我敢肯定,你將不得不打電話給外部庫(據推測是用C編寫的)。畢竟,要用C或C++來做到這一點,難道你不必使用像ncurses這樣的庫嗎?既然如此,那麼D在標準庫中肯定沒有什麼可做的。這是特定於操作系統的。我想有人可以在ncurses上編寫D封裝(甚至可能是跨平臺的封裝),但標準庫中沒有這樣的東西。 D的I/O功能建立在標準C I/O的基礎之上,因此儘管它的性能有所提高,但它的使用方式與標準C和C++的限制方式相似。

+1

Downvote?我說錯了什麼?如果你不告訴我,我不會知道,也無法改善。 – 2011-01-06 17:59:35

+0

肯定會贊成反對一個沉默寡言的人。希望有一天,如果有人給予低估,那麼需要評論。 – biocyberman 2018-02-14 08:34:50