Input 如何在D中获得键盘输入?

Input 如何在D中获得键盘输入?,input,keyboard,d,Input,Keyboard,D,如何在D中获得键盘输入?您必须使用标准的C函数,还是有一种D方法来实现它 编辑:我的意思是在按键时获取事件,比如当用户按下ESC键时,而不仅仅是从标准输入中获取文本输入 // Reads stdin and writes it to stdout. import std.stdio; int main() { char[] buf; while (stdin.readln(buf)) write(buf); return 0; } 。希望这有帮助 。希

如何在D中获得键盘输入?您必须使用标准的C函数,还是有一种D方法来实现它

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

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

int main()
{
    char[] buf;
    while (stdin.readln(buf))
        write(buf);
    return 0;
}
。希望这有帮助


。希望这有帮助

您将需要使用标准C函数


不过,如果您使用的是GUI库,可能会有一些关键事件可以绑定。

您需要使用标准的C函数


但是,如果您使用的是GUI库,则可能存在可以绑定到的关键事件。

stdin
std.stdio
中的全局变量。它是一个
std.stdio.File
。因此,您可以在仅为读取而打开的
文件上执行的几乎所有操作,都可以在
stdin
上执行。您最感兴趣的两个函数是
readln()
readf()
(这两个函数都可以在不显式使用
stdin
readf()的情况下调用)
实际上是
stdin
独有的,而不是
文件
的一部分,因此不能明确地将
stdin
与之一起使用)
readln()
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++中这样做,难道你不需要使用一个库,比如NCURSE吗?在这种情况下,D在标准库中肯定不会做任何事情。这是操作系统特有的。我想有人可以围绕ncurses编写一个D包装器(甚至可能是一个跨平台的包装器),但在标准库中没有这样的东西。D的I/O功能是建立在标准C I/O之上的,所以在改进它时,它往往受到类似于标准C和C++限制的方式的限制。

<代码>代码> STDIN <代码>是STDSTOD中的全局变量。它是一个
std.stdio.File
。因此,您可以在仅为读取而打开的
文件上执行的几乎所有操作,都可以在
stdin
上执行。您最感兴趣的两个函数是
readln()
readf()
(这两个函数都可以在不显式使用
stdin
readf()的情况下调用)
实际上是
stdin
独有的,而不是
文件
的一部分,因此不能明确地将
stdin
与之一起使用)
readln()
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++中这样做,难道你不需要使用一个库,比如NCURSE吗?在这种情况下,D在标准库中肯定不会做任何事情。这是操作系统特有的。我想有人可以围绕ncurses编写一个D包装器(甚至可能是一个跨平台的包装器),但在标准库中没有这样的东西。D的I/O功能是建立在标准的C/I上的,所以在它改进的同时,它也会受到类似于标准C和C++限制的方式的限制。

你在做什么操作,你正在构建什么样的应用程序?命令行工具?基于GUI?您使用的是什么操作系统?您正在构建什么类型的应用程序?命令行工具?基于GUI?谢谢-我无论如何都会在这个项目中使用SDL,但我想知道是否有一种方法可以更早地完成。谢谢-我无论如何都会在这个项目中使用SDL,但我想知道是否有一种方法可以更早地完成。否决票?我说错了什么?如果你不告诉我,我就不知道,也无法提高。一定要向上投票反对在沉默中被否决的人。希望有一天,如果有人投否决票,他需要评论。否决票?我说错了什么?如果你不告诉我,我就不知道,也无法提高。一定要向上投票反对在沉默中被否决的人。希望有一天,如果有人投否决票,他需要评论。