gpt4 book ai didi

d - 从 D 中的标准输入读取单个字符

转载 作者:行者123 更新时间:2023-12-03 21:58:19 25 4
gpt4 key购买 nike

documentation对于 std.stdio 没有列出可用于从标准输入获取单个字符的 read 函数,仅 readln 获取一行. std.fileread 功能,但它需要一个文件名,据我所知,这对于标准输入是不可用的。

如何从 stdin 读取单个字符?

最佳答案

几个选项,具体取决于您的需要:

如果您只是想要一个用于编程目的的字符,但不介意它被行缓冲:

  • 使用rawReadbyChunk 缓冲其中的一个 block (stdinstd.stdio 的一个实例。文件,以便来自 http://dlang.org/phobos/std_stdio.html 区域的所有方法也可用于它)并一次从该数组中读取一项。

  • 通过 import core.stdc.stdio; 使用 C 函数 fgetc 并使用 C 标准输入而不是 D 包装器。它们彼此兼容,因此从一个读取不会弄乱另一个的缓冲。

  • 使用readf函数一次抓取一条数据。

所有这些选项都适用于您的程序,但您会注意到,在程序执行任何操作之前,用户仍然必须按 Enter 键,因为底层输入流一次缓冲到一个完整的行。这也可以改变:

如果您想要立即使用一个 key ,例如与用户进行交互 session :

  • 在评论中查看 Cyber​​Shadow 的链接

  • 通过操作系统调用禁用行缓冲。它是 Posix 上的 tcsetattr 和 Windows 上的 SetConsoleMode - 在网络上搜索有关如何在 C 中禁用行缓冲的详细信息,同样的代码可以很容易地转换为 D。另请参阅我的 terminal.d 的源代码:https://github.com/adamdruppe/arsd/blob/master/terminal.d#L1078

  • 只需使用一个库,例如我的 terminal.d,它提供了一个结构来为您更改缓冲模式,以及类似 getchkbhit 的函数,类似到链接中的旧 conio.h。这是一个示例文件:http://arsdnet.net/dcode/book/chapter_12/07/input.d它显示了一个简单的“按任意键继续”示例。

  • 使用功能更强大的 C 库,例如来自 D 的 ncurseshttp://code.dlang.org/packages/ncurses如果您曾经从 C 中使用过它,它几乎是一样的。

关于d - 从 D 中的标准输入读取单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25334045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com