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

Is it possible to get input live from fgets() in C?

抱歉,如果不清楚,但我真的不确定如何描述。

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

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

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

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编写它们,因为交互式character-by-character终端I/O所需的设施在标准C中不存在. 它们不存在是因为标准 C 不假设有终端这样的东西(例如,许多嵌入式 CPU 没有任何这样的东西),而且它会远远超出 ISO C 的要求尝试标准化具有 terminal-like I/O.

的各种操作系统的不同通信协议

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

无法实现

您尝试做的事情似乎最好使用 Curses 的实现来完成。 (如果您正在使用 Linux,正如您的头像所建议的那样,您将寻找 Ncurses。)您可能想要查看构建在 Ncurses 之上的 Forms 库,它提供了 higher-level 输入工具, 比如可编辑的文本框。

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