是否可以从 C 中的 fgets() 实时获取输入?

cs07

如果不清楚,请道歉,但我真的不知道如何描述这一点。

看,我的问题是我试图从文本中读取用户输入fgets(),但是,我还需要知道用户是否按下了一个特殊的键,比如/b(退格键),因为理想情况下我希望它开始从行中删除字符在当前行为空之前,例如文本编辑器,这在 C 语言中是不可能的。

无论如何,如果您需要更多信息,请告诉我,提前谢谢。

编辑:我想我会继续发布我现在所拥有的内容,以防有人稍后遇到同样的问题以获得更好的主意

for (; ;) 
 {  
  int i; 
  int key = getch();
  
  if (key == '/b')
  {  
   printf("Hello World");
  }  

  else
  {  
   buffer[i++] = key; // adding character to text user is writing
  }  
  i++;
 }

请注意,由于链接器错误和/b.

编辑 2:感谢 chqrlie 提出了引用特殊字符的正确方法。忘了你必须为他们使用反斜杠。

白饭

你当然可以用 C 语言编写文本编辑器 :-) 其中很多都是。

但是,您不能用可移植 C编写它们,因为标准 C 中不存在交互式逐字符终端 I/O 所需的设施。它们不存在是因为标准 C 不假定存在这样的作为终端的东西(例如,许多嵌入式 CPU 没有这样的东西),并且它远远超出了 ISO C 的授权,试图标准化具有终端的各种操作系统的不同通信协议- 类似 I/O。

getch是 Windowsconio.h头文件中的一个过时接口,也是 Curses 库中的接口之一,可用于许多操作系统(包括 Windows)。它与标准 C 的一部分无关fgets,并且不能使用fgets.

似乎您尝试做的事情最好使用 Curses 的实现来完成。(如果您使用的是 Linux,正如您的虚拟形象所建议的那样,您会寻找 Ncurses。)您可能希望查看构建在 Ncurses 之上的 Forms 库,它提供了更高级别的输入工具,例如可编辑的文本框。

另一个常见的输入处理库 GNU readline 也可能有用,但它不处理多行输入表单,因此可能需要做更多的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章