2011-01-05 74 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