是否可以从 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 也可能有用,但它不处理多行输入表单,因此可能需要更多工作。
抱歉,如果不清楚,但我真的不确定如何描述。
你看,我的问题是我正在尝试使用 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 也可能有用,但它不处理多行输入表单,因此可能需要更多工作。