如何在D中获得键盘输入?你必须使用标准的C函数,还是有D方法呢?
编辑:我的意思是在按键上获取事件,例如当用户按下ESC时,而不仅仅是从标准输入的文本输入。
答案 0 :(得分:4)
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);
}
可能导致以下结果:
>你好世界
你好世界
> 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。希望这有帮助!