【发布时间】:2012-04-19 13:15:04
【问题描述】:
我正在尝试编写一个简单的小 sn-p 代码来响应箭头键按下。 我知道 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 的东西)退格,我必须考虑到这一点。在那之后让其余的人排队也不错:)
【问题讨论】:
标签: c stream newline printf carriage-return