我正在玩D编程语言,我想知道我是怎么做的 可以抓住一个角色,而无需用户按回车。
我想要的伪代码示例:
while(true){
if(userHasPressedChar()){
writeln(getChar());
}
}
在C ++中我可以使用conio.h的“getch()”,但我还没有找到类似的东西。
编辑:我使用的是Windows 7。
编辑2:我在this forum找到了一个解决方案,我可以根据自己的需要进行修改。 模块主;
import std.stdio;
import core.sys.windows.windows;
void main() {
auto hCon = GetStdHandle(STD_INPUT_HANDLE);
FlushConsoleInputBuffer(hCon);
for(;;) { // in default console mode, ctrl-C will terminate
INPUT_RECORD inrec;
DWORD numread;
while(inrec.EventType != KEY_EVENT) {
WaitForSingleObject(hCon, INFINITE);
ReadConsoleInputW(hCon, &inrec, 1, &numread);
}
auto keyEvent = inrec.KeyEvent;
writefln("VK: %x \tChar: %x \tState: %x",
keyEvent.wVirtualKeyCode,
keyEvent.UnicodeChar,
keyEvent.dwControlKeyState);
}
}
答案 0 :(得分:3)
您还可以使用各种库。例如,我的terminal.d可以为Windows和Linux执行此操作https://github.com/adamdruppe/arsd/blob/master/terminal.d。
以下是我的书中的示例文件(如果您有兴趣,请参阅我的SO个人资料),该文件演示了使用情况http://arsdnet.net/dcode/book/chapter_12/07/input.d
import terminal;
void main() {
auto terminal = Terminal(ConsoleOutputType.linear);
auto input = RealTimeConsoleInput(&terminal, ConsoleInputFlags.raw);
terminal.writeln("Press any key to exit");
auto ch = input.getch();
terminal.writeln("Bye!");
}
输入对象执行必要的转换到控制台模式以关闭行缓冲并自行清理。创建一个类似于input.getch()
和input.kbhit()
的方法与conio类似。
如果您想进入更高级的用途,我的终端库还会为鼠标输入等事件提供其他事件类型。
要编译,只需下载terminal.d并将其添加到您的命令,例如dmd yourfile.d terminal.d
。