C言語関係掲示板

過去ログ

No833 エスケープシーケンスでカーソル制御

[戻る] [ホームページ]
No.10555

エスケープシーケンス
投稿者---Cっぽこ(2003/11/16 21:33:54)


エスケープシーケンスで、カーソルの2つ上の行までクリア。
2つ下の行へ行くなどはあるでしょうか?
環境はLinuxのgccです。

No.10564

Re:エスケープシーケンス
投稿者---ともじ(2003/11/17 00:05:51)


こんばんは。

>エスケープシーケンスで、カーソルの2つ上の行までクリア。
>2つ下の行へ行くなどはあるでしょうか?

いくつかエスケープシーケンスを組合わせるとできそうです。
#include <stdio.h>

int main(void)
{
    printf("1234567890\n");
    printf("1234567890\n");
    printf("1234567890\n");
    printf("1234567890\n");
    printf("1234567890\n");

    /* カーソルの2つ上の行までクリア */
    (void)getchar();    /* キー入力待ち */
    printf("\33[4A");    /* 上へ4行移動 */
    printf("\33[1J");    /* 上の行まで消去 */
    printf("\33[2K");    /* その行を削除 */
    printf("\33[2B");    /* 元の行へ移動 */

    /* 2つ下の行へ行く */
    (void)getchar();    /* キー入力待ち */
    printf("\33[2B");    /* 下へ2行移動 */

    (void)getchar();    /* キー入力待ち */

    return 0;
}

このあたりを参照してみてください。
http://www.kt.rim.or.jp/~pwp/apidoc/index/0/0000010.html
http://homepage3.nifty.com/peterpan/etescseq-eseq.html


No.10566

Re:エスケープシーケンス
投稿者---Cっぽこ(2003/11/17 00:14:59)


とてもわかりやすい説明ありがとうございます。
しかし、まだまだ初心者で
(void)getchar(); /* キー入力待ち */
が何の意味があるのかわかりません。
教えてください。



No.10569

Re:エスケープシーケンス
投稿者---ともじ(2003/11/17 00:29:06)


>(void)getchar(); /* キー入力待ち */
>が何の意味があるのかわかりません。

コメントの通りで、単にキー入力を待たせただけです。
別に何のキーでもいいのですが、エンターキーあたりを押すと、
エスケープシーケンスでの動きが確認しやすいと思います。
これがないと、いきなり表示が終わるので、何をしているのか
わかりませんものね。

なお、 printf("\33[4A"); /* 上へ4行移動 */
の部分は、キー入力待ちにしない場合は、3行の方がいいかもしれません。

No.10570

Re:エスケープシーケンス
投稿者---とおりすがり(2003/11/17 00:38:36)


>>(void)getchar(); /* キー入力待ち */
>>が何の意味があるのかわかりません。

実は(void)の部分を指して質問していたりして…

No.10572

Re:エスケープシーケンス
投稿者---Cっぽこ(2003/11/17 00:55:38)


>>>(void)getchar(); /* キー入力待ち */
>>>が何の意味があるのかわかりません。
>
>実は(void)の部分を指して質問していたりして…

最初は(void)getchar(); /* キー入力待ち */
の意味が知りたかったんですが言われてみれば(void)の部分もよくわかりません。
ただのキャストかと思ってたけど・・・
次から次とすいませんが教えてください。

No.10573

Re:エスケープシーケンス
投稿者---ともじ(2003/11/17 01:37:02)


>最初は(void)getchar(); /* キー入力待ち */
>の意味が知りたかったんですが言われてみれば(void)の部分もよくわかりません。

説明不足でした、すみません。
この先頭の(void)のキャストは不要ですが、入力値を参照しないことを
強調してキャストしています。



No.10574

Re:エスケープシーケンス
投稿者---Cっぽこ(2003/11/17 01:54:44)


次から次と質問してしまってすいませんでした。
よくわかりました、ありがとうございました。