【发布时间】:2017-12-01 20:16:28
【问题描述】:
我知道有很多类似的问题,但我找不到足够清楚的答案。
我正在编写一些类似于 C 语言的原始外壳的东西。我不断地询问用户输入我处理的命令。要阅读一行,我使用fgets()。它真的很好用(虽然我每次都必须删除\n),但如果我想在输入内容时移动光标,原始键码会被放入控制台。我不仅不能使用向上和向下箭头键来获取以前的命令,而且我也无法更正任何拼写错误,除非使用退格键删除所有内容,直到拼写错误然后再次输入内容。
使用scanf() 时也会发生同样的情况,因此fgets() 不是罪魁祸首。有趣的是,当我在 Windows 上尝试时,它工作得很好。另外,正如我所说,例如退格键实际上会删除字符……
我知道我可以使用ncurses,但我宁愿找到另一个优雅的解决方案……
【问题讨论】:
-
C 标准基于面向流的输入和输出。没有不涉及第三方库的跨平台解决方案。
-
假设你愿意使用第三方库,不过……tiswww.case.edu/php/chet/readline/rltop.html
-
ncurses可能是你最好的选择。 -
还有 Gnu Readline。
-
@LeeDanielCrocker 不是仅适用于 Linux/UNIX 吗?我正在尝试编写适用于 Windows 的可移植代码
标签: c input scanf fgets arrow-keys