我正在尝试编写一小段简单的代码来响应箭头键的按下。 我知道 up 由 ^[[A 表示,我有以下代码检查该序列:
while( 1 )
{
input_char = fgetc( stdin );
if( input_char == EOF || input_char == '\n' )
{
break;
}
/* Escape sequence */
if( input_char == 27 )
{
input_char = getc( stdin );
if( input_char == '[' )
{
switch( getc( stdin ) )
{
case 'A':
printf("Move up\n");
break;
}
}
}
}
每当我按下“向上”键时,转义序列 (^[[A) 就会出现在屏幕上,但“向上移动”直到我按下回车键才会出现。
最终目标是用一些其他数据替换当前行上的文本,所以我尝试这样做
printf("\r%s", "New Text");
代替“向上移动”,但直到按下回车后它仍然不会显示。
我读汉字的方式有问题吗?
谢谢!
编辑 快速说明,它适用于 *nix 系统。
解决方案 谢谢大家指点。我选择了 stepanbujnak 的解决方案,因为它非常简单。我注意到的一件事是,修改字符串的键(退格键等)的许多行为与您预期的不同。它会通过行上的任何东西退格(包括 printf'd 的东西),我必须考虑到这一点。在那之后让其他人排队也不是太糟糕:)
最佳答案
stdin
是行缓冲的,因此 getc(stdin)
或 fgetc(stdin)
在您按下之前不会看到这些字符ENTER 查看此 link了解更多详情
编辑:如果您不想进入ncurses
,还有其他有用的方法,例如将终端设置为原始模式等来克服此限制。检查这个不错的 SO 帖子
Capture characters from standard input without waiting for enter to be pressed
关于c - 在C中读取字符时打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228902/