Input 如何在D中获得键盘输入?
如何在D中获得键盘输入?您必须使用标准的C函数,还是有一种D方法来实现它 编辑:我的意思是在按键时获取事件,比如当用户按下ESC键时,而不仅仅是从标准输入中获取文本输入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; } 。希望这有帮助 。希
// 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,但我想知道是否有一种方法可以更早地完成。否决票?我说错了什么?如果你不告诉我,我就不知道,也无法提高。一定要向上投票反对在沉默中被否决的人。希望有一天,如果有人投否决票,他需要评论。否决票?我说错了什么?如果你不告诉我,我就不知道,也无法提高。一定要向上投票反对在沉默中被否决的人。希望有一天,如果有人投否决票,他需要评论。