\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窓の時に\が「む」キーを押さないと入力できませんが
何か関係がありますか?
No.4ベストアンサー
- 回答日時:
申し訳ない、adddevではなくてadddrvでした(^^;
それで組み込み方ですが、Windows95/98(se含む)であればWindowsのインストールされているドライブの一番上(普通はC:\です)にある、config.sysを編集します。
メモ帳などで開き、適当な個所に
DEVICE=C:\WINDOWS\COMMAND\ANSI.SYS
と記述します(C:\WINDOWS...の部分はそちらのシステムのANSI.SYSの場所を指定してください)。
NTや2000などの起動時にデバイスドライバをロードする機構を持たないものの場合は、adddrvを使います。ロードするデバイスをconfig.sysと同様に記述し
adddrv [ロードするデバイスを記述したファイル名]
として実行すればロードされるはずです。
ドライバがロードされたかどうかは
MEM /D
で確認できたはずです(このへん自信ないです。当時はサードパーティ製の別コマンド使っていたので)
# 以下 駄文です
・・・さすがに最近はこのへんの事も必要なくなったせいで情報も見つかりにくくなってるようです。MS-DOS全盛の頃は知ってて当然に近い事だったのですが・・・
要するにMS-DOS時代の知識ですので、大きな書店に行ってMS-DOS系の本を探せばこのへんの事について詳しく載っています。
また、adddrvの方は設定ファイルいらずのものがVectorにあったはず・・・なんですがX68000版は検索でヒットするけど、MS-DOS版は見当たらず・・・なくなったようです・・・
とおもったらadddevという同等コマンドがあった模様。参考URLにあります。これを使えば設定ファイル無しで読み込む事が出きるようです。
参考URL:http://www.vector.co.jp/soft/dos/writing/se00200 …
詳しい説明ありがとうございました。
さっそくWin98の例をとってconfig.sysを編集してみました。
はじめ何も変わらなかったので、あれ?と思ったのですが
「あっ再起動してない」と思って再起動したら
バッチリの実行結果が表示されました。
1人ではとても解決できなかったでしょう。
本当にありがとうございました。
No.3
- 回答日時:
たしかescape sequenceを通すためにansi.sysをロードしてやる必要があったと思います。
adddevコマンドでansi.sysをロードするか、config.sysでansi.sysを組み込んでから実行してみてください。
ええと、なんか私の求めていた答えがここにある!と言う感じがしてます。
ありがたいです。
でも、言ってることが私には難しいです。
調べて見ましたらansi.sysっていうファイルはマシンの中に2つ、
config.sysというのは4つありました。必要なファイルは手元に
あるという事でしょうか?
「adddevコマンドでロードする」「config.sysで組み込んでから」
…すみません。意味がわかりません。
何をしたら良いのでしょう?
---------------------------------------------------------
p.s.
回答No.1に対する補足の中の3行目、
printf("\x1b35mピンク"); は、
printf("\x1b[35mピンク"); の誤りです。
million-showさん、失礼いたしました。
No.2
- 回答日時:
エスケープシーケンスを使って画面を消したり、色を変えようと
なさっていると思いますが、DOSプロンプトでは出来なかった
ような気がします。MS-DOSとかPC-DOSでは使えますが・・・
あと、「む」で「¥」が表示されるのは、お使いのキーボードを
Windowsが英語版のキーボードと認識している、と思われます。
そうそうエスケープシーケンス(制御文字)とかいうやつです。
有力な情報ありがとうございます。
しかし私にはさらなる疑問が…
PC-DOSってはじめて聞きました。これって何ですか?
あとWindows上ではキーボードは正常に動作してますが、
DOS窓とWin終了後のMS-DOSモードどちらともキーボードの認識が
おっしゃるように誤認しているようです。
DOS上のキーボードの認識を改める方法ってあるんでしょうか?
No.1
- 回答日時:
すみません。
私の日本語能力が低いのでvideさんが何を言わんとしているかがわからないのですが
改行をしたいのですか?
改行は
\n
と入力してください。
そうではなく、
\x1b
と実行画面で表示させたいのなら、
\\x1b
と\を2回続けて入力してください。
この回答への補足
簡単に言うと私の狙いとしては、
printf("\x1b[2J"); /* 画面をクリアする */
printf("\x1b35mピンク"); /* "ピンク"という文字をピンク色で表示する */
なので期待する実行画面は
------------------------------------
ピンク(←ピンク色で)
------------------------------------
とやりたいのですが
現状ですと
------------------------------------
←[2J←[35mピンク(←白色で)
------------------------------------
となってしまい期待通りの実行結果が得られないので
どなたか良きアドバイスを!!ということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
Tera Term Proに関する質問です。
-
ttlで戻り値を取得する方法
-
コンボボックス(最終行取得)
-
別のユーザーフォームのコマン...
-
VBユーザーフォームで時間入力
-
バッチファイルでキー操作を行う。
-
文字の点滅はどうやるのですか?
-
VBでネットワーク上のコンピュ...
-
コマンドキーがないんですけど...
-
Excel VBA コマンドライン(MS-...
-
デフォルトのショートカットキ...
-
wordを立ち上げる時
-
HEXから元に戻すには
-
dosバッチ起動後、画面を閉じな...
-
DOSコマンドでポートから受信
-
Linux
-
WaitForSingleObjectについて
-
UDP通信での受信方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
バッチファイルでキー操作を行う。
-
ttlで戻り値を取得する方法
-
別のユーザーフォームのコマン...
-
VBユーザーフォームで時間入力
-
Tera Term Proに関する質問です。
-
RTX1100の削除コマンド
-
コマンドプロンプトですべてのU...
-
コンボボックス(最終行取得)
-
EEPROMのデータの初期化について
-
文字の点滅はどうやるのですか?
-
excel-vbaで作成したマクロを別...
-
コマンドキーがないんですけど...
-
ルーターにつながっている全て...
-
VBA
-
dosバッチ起動後、画面を閉じな...
-
[WSH|JS|VB] telnetコマンドの...
-
【Teratermマクロ】文字列の一...
-
makeコマンドのエラー
おすすめ情報