2017-01-07 24 views
0

cのように、scanf(キーボードからの入力を受け取ります)のような動作をしていますが、端末のように矢印キーを押してカーソルを入力に移動できますか?scanfとcの矢印キーの対応

+3

[Readline library](https://cnswww.cns.cwru.edu/php/chet/readline/rltop.html)を参照してください。 – alk

答えて

0

これを行うためのC標準の機能はありません。

あなたは、ほとんどの(おそらくすべて)の端末のプログラムがし続けている、あなたは少し仕事をしたい場合は、VT100のエスケープシーケンスを使用して「独自のロール」することができ、以前の提案に加えてncurses

-1

を見ることができますサポート。ここでは、小さなサンプルプログラムは、だ

#include <stdio.h> 
#include <string.h> 
#include "vt100.h" 
int  main (int argc, char *argv[]) 
{ 
char cupstr[99]; 
char reply[99]; 
strcpy(cupstr,_cup(12,25)); 
printf("%sEnter Data ---> ",cupstr); 
fgets(reply,88,stdin); 
strcpy(cupstr,_cup(13,25)); 
printf("%sEchoed Data --> %s\n",cupstr,reply); 
} 

そして、大部分は、これらのエスケープシーケンスは、あなたはとてもクールに見えるために使用されるすべてのものをプログラムしてみましょう

/* ------------------------------------------------------------------------- * 
    VT100.H (c)1989-1999, John Forkosh Associates  VT-100 Graphics 
* ------------------------------------------------------------------------- */ 
#define bel   printf("\007") 
#define esc   printf("\033") 
#define csi   printf("\033[") 
#define lscreen  printf("\033[?5h") 
#define dscreen  printf("\033[?5l") 
#define rev_vid  printf("\033[7m") 
#define blink  printf("\033[5m") 
#define under  printf("\033[4m") 
#define bold  printf("\033[1m") 
#define norm_vid printf("\033[0m") 
#define wide_vid printf("\033#6") 
#define high_vid2 printf("\033#4") 
#define high_vid1 printf("\033#3") 
#define graphic  printf("\033(0") 
#define no_graph printf("\033(B") 
#define no_window printf("\033[1;24r") 
#define no_att  printf("\033[0;22;24;25;27m") 
#define cup(row,col) printf("\033[%d;%dH",(row),(col)) 
#define stbm(top,bot) printf("\033[%d;%dr",(top),(bot)) 
#define ri   printf("\033M") 
#define el   printf("\033[K") 
#define ed0   printf("\033[0J") 
#define bar   graphic;printf("x");no_graph 
#define wipe(row,col) cup(row,col);printf("\033[J") 
#define clr   wipe(0,0);norm_vid 
/* ------------------------------------------------------------------------- * 
    String equivalents ... Note: _cup() and _stbm() only accept literal args. 
* ------------------------------------------------------------------------- */ 
#define _bel  "\007" 
#define _esc  "\033" 
#define _csi  "\033[" 
#define _lscreen "\033[?5h" 
#define _dscreen "\033[?5l" 
#define _rev_vid "\033[7m" 
#define _blink  "\033[5m" 
#define _under  "\033[4m" 
#define _bold  "\033[1m" 
#define _norm_vid "\033[0m" 
#define _wide_vid "\033#6" 
#define _high_vid2 "\033#4" 
#define _high_vid1 "\033#3" 
#define _graphic "\033(0" 
#define _no_graph "\033(B" 
#define _no_window "\033[1;24r" 
#define _no_att  "\033[0;22;24;25;27m" 
#define _cup(row,col) "\033[" #row ";" #col "\110" 
#define _stbm(top,bot) "\033[" #top ";" #bot "\162" 
#define _ri   "\033M" 
#define _el   "\033[K" 
#define _ed0  "\033[0J" 
#define _bar  "\033(0x\033(B" 
#define _wipe_clr "\033[0;0H\033[2J" 
#define _clr  "\033[0;0H\033[2J\033(B\033[0m\033[1;24r" 
/* ------------------------------------------------------------------------- */ 

、すべてのエスケープシーケンスを含むことvt100.hですvt100、vt220などで、長い、ずっと前です(しかし、ここではこの銀河の中にあります)。

関連する問題