lC言語 エスケープコード '97. 1.17  
l.お知らせ 内容 LINK FILE   HTML Win PC Unix MS-DOS C C++ Mfc Java 
.C言語_ 3 フォ-マットコ-ド 6 演算子 9 FOR  集合デ-タ  目的別
1 表示してみる 4 変数と定数 7 条件判断 10 WHIILE  ポインタ     
2 エスケ-プ コ-ド 5 デ-タ入力 8 分岐   未使用  関数   ★ 
エスケ-プ コ-ド(表示制御)  説明(使用例)  備考(デ-タの構造と表示 改行コ-ド) 

エスケープコード  説明は、ページの後部にあります。
太字で書かれているものは重要です。他は必要に応じて使用します。
\'       ' を表示します。
\?       ?  〃
\\       \  〃
\a       ビ-ッ と音(ベル) を鳴らします。
\b       1字戻り。
\f       改ページ。(プリンタ用)
\t       水平タブを表示します。
\r      復帰。(カーソルを、行の左端に移動します。)
\n      改行。(カーソルを、下の行に移動します。)
\v       垂直タブ。
\ddd    dd(3桁以下) を8進数として処理させます。 \777=511(10進数)
           8進数の数字は 0〜7 です。後に数字以外の文字が続く場合に限り、
           \6188 のように3桁未満で書いても 区別されます。
           後に8進数の数字が続く場合は、\06177 のように3桁で書きます。
\xddd   ddd(3桁以下) を16進数として処理させます。 \xFFF=4,095(10進数)
           16進数の数字は 0〜F です。後に数字以外の文字が続く場合に限り、
           \x4AGG のように3桁未満で書いても 区別されます。
           後に16進数の数字が続く場合は、\x04AFF のように3桁で書きます。
\0 または \x0      数値の 0 を表わす記号。/ 文字列の最後を表わす記号。/ NULL。
           後に数字が続く場合は、\000 または \x000 のように、省略しないで書きます。
           NULL : 数値の 0 へのポインタ。 ( 代りに '\0' を使うことは ないと思いますが。)
備考
[水平タブ] : 画面は普通、8文字毎に水平タブという位置が決められています。
\t の表示を指定すると、水平タブ位置までのスペース(タブ) が表示されます。
\t を使うことで、スペースを含む文章をきれいに揃えて表示することができます。
ただし 水平タブ位置は、プログラムで変更できます。
\t を含むデータを別なプログラムで使用すると、目的の配置とは違う表示になる場合があります。

[復帰と改行] : C言語で扱うデータには、復帰 \r を使う必要はありません。
MS-DOS や Windows 用のデータを作る場合は、復帰 \r も必要になります。
バッチファイルやノートパッド用の文章は、\r と \n で改行が完了します。
\n だけで改行できるのは、C言語プログラム用のデータと、UNIX 用のデータです。


エスケープコード \033[ 
表示操作のコードと組み合わせて使います。
\033[2J  画面をクリアします。   \033[m  既定の文字色に戻します。
\033[30m 文字色を黒にします。   \033[40m \033[30m の反転表示。
\033[31m  〃  赤  〃     \033[41m \033[31m  〃
\033[32m  〃  緑  〃     \033[42m \033[32m  〃
\033[33m  〃  黄色 〃     \033[43m \033[33m  〃
\033[34m  〃  青  〃     \033[44m \033[34m  〃
\033[35m  〃  紫  〃     \033[45m \033[35m  〃
\033[36m  〃  水色 〃     \033[46m \033[36m  〃
\033[37m  〃  白  〃     \033[47m \033[37m  〃
\033(10進数の 27) は、文字として表現できないので、8進数表現をしています。
メモ : 文字色を変更した場合は、\033[m で既定値に戻しておきます。
もし色を戻さないままプログラムを終了すると、その後の MS-DOS の操作が見にくなったりするからです。

8進数の 33 は、10進数では 27、16進数では 1B です。
これだけは文字に表現できないので、8進数値で書いています。
これは、Esc キーのキーコードと同じなので、参考書には ESC と書かれている場合があります。
なお、10進数値は文字列の中に挿入できません。


説明
\n など、\ で始まる特定の文字列を表示しようとすると、コンピュータは 表示動作を中断(エスケープ)して、特別な動作をします。
文字として表示されずに、特別な働きをするこれらの記号を、エスケープコードといいます。

エスケープコードを使った例
#include<stdio.h>		/* stdio.h をインクルードします。*/
void main()			/* 以下、処理の内容。*/
{
  printf( "\033[2J" );           /* これまでの画面を消去します。*/
  printf( "\033[043m ABC\t" );  /* 背景色黄色で ABC と表示し、タブを表示します。*/
  printf( "\033[034m DEG\t" );      /* 青色で DEF と表示し、タブを表示します。*/
  printf( "\033[031m GHI\n\n" );    /* 赤色で GHI と表示し、2回改行します。*/
  printf( "\033[m&" );           /* 文字色をパソコンの既定値に戻します。*/
}
画面消去(\033[2J) を、色々な方法で表示します。
#include<stdio.h>
void main( )
{ char cls[10]="\033[2J";
 
printf("%s",cls);
 
printf("\033,\133,\062,\112");
 
printf("\x01B\x05B\x032\x04A");
 
printf("%c%c%c%c" ,27 ,91 ,50 ,74);
}


画面消去用のデータを用意 
あらかじめ用意したデータ cls を使用。
 
8進数だけを使用。
 
16進数だけを使用。
 
すべて10進数のデータを1個ずつ順番に使用


\033 は、文字としては使用されない番号なので、数値で指定します。
%c は、数値を文字として表示する記号です。( → [フォ-マットコ-ド] のページ )


備考 : 表示データの構造
コンピュータのデータそのものには、数値や文字の区別がありません。

printf() という関数は、("") の中のデータを 文字として表示します。
ただし、\ という文字があると、その後のデータを 文字ではなく、制御コードであると判断します。
\n があると改行します。
\0 があると表示動作を終了します。
printf() は、そのような動作をするように作られているのです。

\ を制御コードの始まりであると認識するのは、printf() などの
文字列を表示、または入力するために作られた関数だけです。

別な関数、例えば strcpy() は、\0 以外のデータを区別しません。
この関数は、\0 までデータを別な場所に、単純にコピーします。
#include<stdio.h> /* printf() の本体がここに挿入されます。*/
#include<string.h> /* strcpy() の本体がここに挿入されます。*/
void main( )
{ char st[20];
strcpy(st,"ABC\nDEF\n\0"); /* ABC\nDEF\n を、st にそのままコピーします。*/
printf( st );
}
" " のデータの最後には、自動的に \0 が付け加えられます。
ですから実際には、上記の \0 は、書く必要はありません。

データの中身を確認する
データを文字配列に格納しておくと、一個ずつ 10進数 または 16進数で表示できます。
#include<stdio.h>
void main( )
{ char st[20]="ABC\tDEF\n";
printf("%d ",st[0] ); /* A のコード(文字の番号) を、10進数で表示します。*/
printf("%d ",st[1] ); /* B  〃*/
printf("%d ",st[2] ); /* C  〃*/
printf("%d ",st[3] ); /* \t 〃*/
printf("%d %d %d %d ",st[4],st[5],st[6],st[7] ); /* DEF\n のコードを表示します。*/
}
16進数で表示するには、%d の部分を %X にします。

改行コードについて
文書ファイルを作成するプログラムを作るときに 思い出して下さい。

[キーボードの改行コード]
キーボードの Enter キーを押すと、0x0D(16進表現) が発生します。
プログラムは普通、このコードを改行コードとして受け取ります。
これを改行コードとして使うかどうかは、プログラムの勝手です。
文字列入力関数 gets() は 0x0D を、入力完了のコードとして使っています。
  char S[100];   /* 文字配列 S を用意します。*/
  printf("文章=");
  gets( S );        /* S に文字列を入力します。*/
  printf("%s\n",S); /* 入力された内容を表示します。*/
gets() は、キーボードから送られて来るキーコードを S[] に格納します。
0x0D が送られてくると、データの最後に 0x00(\0) を付け足して、入力を終了します。

[表示データの改行コード]
画面に 0x0A(16進表現) を表示すると、改行されます。
0x0A は、エスケープコードを使って "\x00A" のように、文字列データに挿入できます。
改行コードはよく使われるので、\n というエスケープコードも用意されています。
最終的な表示は MS-DOS にしてもらうので、このコードでは変更できません。
普通の文字データは、キーボードと同じコードを使います。

[テキストファイルの改行コード]
テキストファイルでは、改行コードには 0x0D 0x0A が使用されます。
もし、MS-DOS のリダイレクトを使って画面ではなく ファイルに保存すると、
文字コードはそのままで、改行コード 0x0A は、0x0D 0x0A として保存されます。

プログラムで直接文書ファイルを作成する場合は、0x0D と 0x0A が必要です。
0x0D と 0x0A は、C言語のソースファイルでは \r と \n で表現できます。


C言語 1 表示してみる 2 エスケ-プ コ-ド 2 フォ-マット コ-ド
 
  mtoga@sannet.ne.jp   登録日 '96. 6.15
URL : http://www.page.sannet.ne.jp/mtoga/index.html