在C中读取字符时打印

Nei*_*eil 3 c printf newline stream carriage-return

我正在尝试编写一个简单的小代码片段来响应箭头按键.我知道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;
                 }
             }
         }
     }
Run Code Online (Sandbox Code Playgroud)

每当我点击"向上"时,转义序列(^ [[A]显示在屏幕上,但"上移"直到我按下回车才出现.

最终目标是用其他一些数据替换当前行上的文本,所以我试着这样做

printf("\r%s", "New Text");
Run Code Online (Sandbox Code Playgroud)

取代"向上移动",但在按下输入后仍然不会显示.

我在读字的方式有问题吗?

谢谢!

编辑快速注释,它适用于*nix系统.

解决方案 感谢大家的指点.我选择了stepanbujnak的解决方案,因为它非常简单.我注意到的一件事是修改字符串(退格等)的键的很多行为与你期望的不同.它会在线上退出任何东西(包括printf'd的东西),我不得不考虑到这一点.在那之后,让其他人排成一行并不太糟糕:)

Pav*_*ath 10

stdin是行缓冲的,因此getc(stdin)或者fgetc(stdin)直到你按下才能看到这些字符.ENTER有关详细信息,请参阅此链接

编辑:如果您不想进入ncurses其他有用的方法,如将终端设置为原始模式等,以克服此限制.检查这个不错的SO帖子

从标准输入中捕获字符,无需等待按下输入