我正在尝试编写一个简单的小代码片段来响应箭头键按下。我知道 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 的东西)退格,我必须考虑到这一点。在那之后,让其余的人排队并不算太糟糕:)