- ベストアンサー
エスケープコマンドの出力ができません
エスケープコマンドを出力しようと下記のようなコードを実行しました. 本来であれば画面がクリアされるはずなのに,出力は "?[2J" と表示されました(""の内側です). ただし'?'の部分はEnterキーに記されているような矢印記号で,機種依存文字だと思われます. 正しく画面クリアが実行されない原因がわからなくて困っています. どなたかご回答くださいますようお願いします. [環境] ・コンパイラ:Borland C++ 5.5.1 for Win32 ・OS:Win2000 [ソースコード] #include<stdio.h> void main(){ printf("\x1b[2J"); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> または32ビットコンソールから,何らかの方法で16ビットのDOSアプリケーションを作成,実行できるのでしょうか. > どなたかご回答いただけましたら幸いです. Borland C++ 5.5.1 for Win32は「非常に高速な 32 ビットの最適化コンパイラです。」となっているのでこのままでは16ビットアプリとしてはコンパイルできません。 解決方法は、コンパイラを16ビットアプリ用のコンパイラに変えることです。 例えば、DOS用のコンパイラであるDJGPP(DOS用のgcc)やLSI C-86 3.30試食版とかなら16ビットアプリが作成できますので、表示できると思います。
その他の回答 (3)
- kaha
- ベストアンサー率23% (41/177)
- kaha
- ベストアンサー率23% (41/177)
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を参照してプログラム例を実行してみましたところ 無事に実行できました. conioでも様々なことができるようなので,これからいろいろな使い方を試してみたいと思います.
- anmochi
- ベストアンサー率65% (1332/2045)
Windows 2000は初期状態でエスケープシーケンスが有効になっていないのではないかな。 %SYSTEMROOT%\system32\config.nt というファイルをメモ帳で開いて device=%SYSTEMROOT%\system32\ansi.sys という行を追加してあげよう。保存した後に開いたDOS窓で有効になる。
補足
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アプリケーションを作成,実行できるのでしょうか. どなたかご回答いただけましたら幸いです.
お礼
お返事が送れましたがご回答ありがとうございます. LSI C-86 3.30試食版に含まれるlcc.exeでコンパイルしましたら,無事にエスケープシーケンスを実行させることができました. どうもありがとうございました.