【问题标题】:Cross platform solution for input on stdin with arrow keys support?使用箭头键支持在标准输入上输入的跨平台解决方案?
【发布时间】: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


【解决方案1】:

您需要像 readline 这样的库。
不要纠结于“可移植代码”。
您可以使用Conditional Inclusion 在不同平台上保持兼容。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多