在 D 中如何获得键盘输入?你必须使用标准的 C 函数,还是有 D 方法来做到这一点?
编辑:我的意思是在按键上获取事件,例如当用户按下 ESC 时,而不仅仅是来自 stdin 的文本输入。
stdin是 中的全局变量std.stdio。它是一个std.stdio.File. 因此,您可以在File仅用于读取的a上执行的几乎所有操作,您都可以在stdin. 您最有可能感兴趣的两个函数是readln()and readf()(这两个函数都可以在不显式使用 的情况下调用stdin,并且readf()实际上是唯一的stdin而不是 的一部分File,因此您不能stdin显式使用它)。readln()从 中读取一行stdin。readf()允许您读入格式化输入(类似于scanf()在 C 中)。这个程序:
import std.stdio;
import std.string;
void main()
{
write("> ");
auto input = strip(stdin.readln());
writeln(input);
write("> ");
float f;
readf("%f", &f);
writeln(f);
}
Run Code Online (Sandbox Code Playgroud)
可能导致以下情况:
> 你好世界
你好世界
> 2.7
2.7
所以,这很简单。就个人而言,readln()如果需要(可能使用std.conv.parse())而不是使用,我最有可能使用然后解析结果字符串readf(),但readf()显然也有它的用途。
如果您正在寻找来自按键的事件而不仅仅是文本输入,我很确定您将不得不为此调用外部库(大概是用 C 编写的)。毕竟,要在 C 或 C++ 中做到这一点,您不是已经必须使用诸如 ncurses 之类的库吗?既然如此,D 肯定不会在标准库中做任何事情。那是特定于操作系统的。我想有人可以围绕 ncurses 编写一个 D 包装器(甚至可能是一个跨平台的包装器),但是标准库中没有这样的东西。D 的 I/O 功能建立在标准 CI/O 之上,因此虽然它确实对其进行了改进,但它的限制方式往往类似于标准 C 和 C++ 的限制方式。