如何在D中输入键盘输入?

时间:2011-01-05 20:45:52

标签: input keyboard d

如何在D中获得键盘输入?你必须使用标准的C函数,还是有D方法呢?

编辑:我的意思是在按键上获取事件,例如当用户按下ESC时,而不仅仅是从标准输入的文本输入。

3 个答案:

答案 0 :(得分:4)

stdinstd.stdio中的全局变量。这是std.stdio.File。因此,几乎所有可以在File上执行的操作只能在阅读时打开,您可以在stdin上执行。您最有可能感兴趣的两个函数是readln()readf()(两者都可以在未明确使用stdin的情况下调用,而readf()实际上是唯一的到stdin而不是File的一部分,因此无法明确地使用stdinreadln()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);
}

可能导致以下结果:

  

>你好世界
  你好世界
  > 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 :(得分:3)

您需要使用标准C函数。

虽然如果您使用的是GUI库,可能会有绑定的关键事件。

答案 2 :(得分:2)

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

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

Source。希望这有帮助!