• ベストアンサー

エスケープコマンドの出力ができません

エスケープコマンドを出力しようと下記のようなコードを実行しました. 本来であれば画面がクリアされるはずなのに,出力は "?[2J" と表示されました(""の内側です). ただし'?'の部分はEnterキーに記されているような矢印記号で,機種依存文字だと思われます. 正しく画面クリアが実行されない原因がわからなくて困っています. どなたかご回答くださいますようお願いします. [環境] ・コンパイラ:Borland C++ 5.5.1 for Win32 ・OS:Win2000 [ソースコード] #include<stdio.h> void main(){ printf("\x1b[2J"); }

質問者が選んだベストアンサー

  • ベストアンサー
  • katouka09
  • ベストアンサー率50% (130/256)
回答No.2

> または32ビットコンソールから,何らかの方法で16ビットのDOSアプリケーションを作成,実行できるのでしょうか. > どなたかご回答いただけましたら幸いです. Borland C++ 5.5.1 for Win32は「非常に高速な 32 ビットの最適化コンパイラです。」となっているのでこのままでは16ビットアプリとしてはコンパイルできません。 解決方法は、コンパイラを16ビットアプリ用のコンパイラに変えることです。 例えば、DOS用のコンパイラであるDJGPP(DOS用のgcc)やLSI C-86 3.30試食版とかなら16ビットアプリが作成できますので、表示できると思います。

harukasan
質問者

お礼

お返事が送れましたがご回答ありがとうございます. LSI C-86 3.30試食版に含まれるlcc.exeでコンパイルしましたら,無事にエスケープシーケンスを実行させることができました. どうもありがとうございました.

その他の回答 (3)

  • kaha
  • ベストアンサー率23% (41/177)
回答No.4

No.3です。 参考URL間違えました。 訂正 http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq1.html

参考URL:
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq1.html
  • kaha
  • ベストアンサー率23% (41/177)
回答No.3

Windows2000では普通32ビットのcmd.exeが実行されます。No.1さんの設定をしてからcmd.exeでなく、command.comを実行する必要があります。 実行方法1  「ファイル名を指定して実行」からcommand.comを実行する。 実行方法2  DOS窓のプロンプトからcommand.comと入力して実行する。 ================ Borland C++ 5.5.1 for Win32は32ビットコンパイラだから、このコンパイラでエスケープシーケンスは無理です。 コンソール入出力関数(conio)なら使えますよ。32ビットコンソールで使えます。(参考URL) 画面クリア→clrscr() x,y位置→gotoxy(x, y) テキストカラー→textcolor(color) (conio.hを参照)

参考URL:
C:\borland\bcc55\faq\bccfaq1.html
harukasan
質問者

お礼

お返事が遅れましたがご回答ありがとうございます. 参考URLを参照してプログラム例を実行してみましたところ 無事に実行できました. conioでも様々なことができるようなので,これからいろいろな使い方を試してみたいと思います.

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

Windows 2000は初期状態でエスケープシーケンスが有効になっていないのではないかな。 %SYSTEMROOT%\system32\config.nt というファイルをメモ帳で開いて device=%SYSTEMROOT%\system32\ansi.sys という行を追加してあげよう。保存した後に開いたDOS窓で有効になる。

harukasan
質問者

補足

anmochiさんご回答ありがとうございます. ご指摘いただいた改善策を実行してもやはりエスケープシーケンスが有効になりませんでした. そこで回答の内容を元に調べ直したところ,以下のページで次のような記述を発見しました. http://www.xlsoft.co.jp/jp/products/intel/cvf/visual/faq.html 「Windows 95 とは異なり、Windows NT は ANSI.SYS によって 32 ビット・コンソール・アプリケーションで ANSI のエスケープ・シーケンスを有効にすることはできません。Windows NT は、16 ビットの DOS アプリケーションに対してのみ ANSI.SYS をサポートします。」 従ってWin2000でもエスケープ・シーケンスを有効にすることは不可能なのでしょうか. または32ビットコンソールから,何らかの方法で16ビットのDOSアプリケーションを作成,実行できるのでしょうか. どなたかご回答いただけましたら幸いです.

関連するQ&A

  • \x1bが働きません。

    \x1bが働きません。 すみません。C言語初心者でよくわかりません。 コンパイラはフリーのBorland C++ Compiler 5.5を使用してます。 OSはWindows98です。 記述は下記のとおりですが、 ------------------------------------------------------ #include <stdio.h> #include <conio.h> void main(void); void main(void) {   int i;   printf("clear\x1b[2J\n");   for(i=30;i<=37;i++){     printf("\x1b[%dmcolor\n",i);   }   getch(); } ------------------------------------------------------ DOS窓の実行画面はこのとおり。全部白文字で出力されます。 ------------------------------------------------------ clear←[2J ←[30mcolor ←[31mcolor ←[32mcolor ←[33mcolor ←[34mcolor ←[35mcolor ←[36mcolor ←[37mcolor (getchの入力待ち) ------------------------------------------------------ 実際は←の所はEnterキーに印刷されているカギ状の矢印です。 \x1bが改行マーク?に置きかえられているのです。 どなたかアドバイスお願いします。 ちなみにDOS窓の時に\が「む」キーを押さないと入力できませんが 何か関係がありますか?

  • エスケープ・シーケンスによる画面消去

    次のプログラムを使ってコマンドの画面消去をしようとしたのですが、上手くいきませんでした。どうすれば良いですか? /* sample.c */ #include <stdio.h> int main(){ printf("\x1b[2J"); return(0); } 実行結果 >sample ←[2J

  • 簡単なscanf文が、わかりません。

    #include <stdio.h> int main(void) { int data; scanf("%d",&data); /*入力部分*/ printf("%d\n",data); return 0; } 参考書には、キーで入力、enterキー押すと、はじめて文字が画面に表示されるとなってましたが。 実際は、enter押さずに、キーボードでキー入力した時点で文字が表示されますが、 どこが間違っているんでしょうか? コンパイラは、 Borland C++ Compiler です。 お願いします。

  • 初歩 文字のカウントについて ( K&R第2版 22ページ )

    K&R第2版の22ページにある文字のカウントで #include <stdio.h> { long nc; nc = 0; while ( getchar() != EOF ) ++nc; printf("%ld\n" , nc); } という文があるのですがこれは入力された文字数を数字で出力するものではないのでしょうか 実行しても文字が表示されるだけなんです ちなみにコンパイラは Borland C++ 5.5 です

  • 実行結果の順番がおかしいんです・・・・・(。。;)

    現在C言語の勉強をしている初心者です。突然ですが 例えば、このようにプログラムしたら・・・ #include <stdio.h> int main(void) { int n; printf("何か数字を入力してください:"); scanf("%d",&n); printf("\n入力した数字は%dです。\n",n); return 0; } <<実行結果>>  何か数字を入力してください:2 [Enter]  入力した数字は2です。 って普通は出力されますよね??しかし、私の使っているBorland C++ Compiler 5.5 では <<実行結果>>  2 [Enter]  何か数字を入力してください:  入力した数字は2です。 っていう風に、まず、なにか入力しないとprintfの内容を出力してくれないんです。(汗)これって実行結果の順番がおかしいですよね・・・(。。;) どうかこの状態を直せるアドバイスをください。 よろしくお願い致します。m(__)m

  • C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると

    C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。

  • Borland C++を利用しているのですが、簡単なプログラムが実行できません。

    Borland C++を利用しているのですが、簡単なプログラムが実行できません。 以下のようなプログラムをコンパイルして実行しようとしたのですが... #include <stdio.h> void main(void) { int i,j,k; i=1; j=2; k=i+j; printf( "k=%d,k); } Borland C++は、初めて使うのですが、C言語の勉強には使えないのでしょうか? もし使えるなら、どのようにすればよいのでしょうか?

  • windowsのコンパイラーで正しく実行されたのに、gccのコンパイラーでエラーがでた

    windowsのコンパイラーで正しく実行されたのに、gccのコンパイラーでエラーがでたソースコードです。ファィル名test.c です。Linux(Red Hat9) gccです。windowsのコンパイラーはCPad for Borland C++Compilerです。 #include <stdio.h> void main() //intからvoidに変更した { int i, j; for (i=1; i<=9; i++){ printf("%2d ",i); //%2dで、iが2桁に表示 } printf("\n"); printf("***************************\n"); //この罫線もどきの書き方はダサいので工夫してください for (i = 1; i<=9; i++){ for (j = 1; j<= 9; j++) { printf("%2d ", i*j); if (j == 9) printf("\n"); //1行表示後改行 } } return; //voidにしたので0を取った! } これがLinux(RedHat9)gccでは以下のエラーが出ます。 (test.c: 関数 `main' 内: test.c:4: 警告: `main' の戻り値の型が `int' ではありません)  なぜ、同じソースコードでエラーが起こるのですか?  Linux gccでは、この場合`int' 以外の何が必要なのでしょうか? 以上よろしくお願いします。

  • BCC Developerについて。

    Borland C++ Compiler、BCC Developerを使って #include <stdio.h> void main(){ printf("Hello C world.\n"); } をメイクしてみたのですが、 インクルードファイル 'stdio.h' をオープンできない 、と表示されコンパイルできませんでした。 環境設定は、コンパイラにbbc32.exeを指定すればいいだけなんでしょうか?よろしくお願いします。

  • 不定値の出力について

    #include <stdio.h> int main(void) { /*  */ int x=1, a; /*  */ double y=0, b; /*  */ printf("a = %d\n", a); /*  */ printf("b = %f\n", b); /*  */ printf("x/y = %f\n", x/y); /*  */ printf("y/y = %f\n", y/y); /*  */ return(0); } -------------------------------------------------- このようなプログラムを実行すると、どのような出力結果が期待できるのでしょうか。 int 型と double 型しか用いていませんが、型によって説明が異なるのであれば他の型についても回答お願い致します。 コンパイラや環境によって出力結果が異なるのでしょうか。 具体的な出力結果でなく、どのように処理されるためにどのような出力が期待されるという形でも説明を頂けますでしょうか。 Visual C++ で実行した結果は次のようになりました。 -------------------------------------------------- a = -858993460 b = -92559631349317831000000000000000000000000000000000000000000000.000000 x/y = 1.#INF00 y/y = -1.#IND00 -------------------------------------------------- ご教示いただければ幸いです。

専門家に質問してみよう