如何在D中獲得鍵盤輸入?你是否必須使用標準的C函數,或者有沒有一種方法可以做到這一點?如何在D中獲取鍵盤輸入?
編輯:通過這個我的意思是在按鍵上獲得事件,就像用戶按下ESC時,不僅僅是來自stdin的文本輸入。
如何在D中獲得鍵盤輸入?你是否必須使用標準的C函數,或者有沒有一種方法可以做到這一點?如何在D中獲取鍵盤輸入?
編輯:通過這個我的意思是在按鍵上獲得事件,就像用戶按下ESC時,不僅僅是來自stdin的文本輸入。
您將需要使用標準C函數。
雖然如果您使用的是GUI庫,那麼可能會綁定到關鍵事件。
謝謝 - 我將在這個項目中使用SDL,但我想知道是否有辦法做到這一點。 – bfops 2011-01-06 12:10:54
// Reads stdin and writes it to stdout.
import std.stdio;
int main()
{
char[] buf;
while (stdin.readln(buf))
write(buf);
return 0;
}
Source。希望這可以幫助!
stdin
是std.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++的限制方式相似。
Downvote?我說錯了什麼?如果你不告訴我,我不會知道,也無法改善。 – 2011-01-06 17:59:35
肯定會贊成反對一個沉默寡言的人。希望有一天,如果有人給予低估,那麼需要評論。 – biocyberman 2018-02-14 08:34:50
你在操作什麼操作系統?你在建什麼樣的應用程序?命令行工具?基於GUI的? – 0scar 2011-01-06 09:48:55