\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.1
- 回答日時:
すみません。
私の日本語能力が低いのでvideさんが何を言わんとしているかがわからないのですが
改行をしたいのですか?
改行は
\n
と入力してください。
そうではなく、
\x1b
と実行画面で表示させたいのなら、
\\x1b
と\を2回続けて入力してください。
この回答への補足
簡単に言うと私の狙いとしては、
printf("\x1b[2J"); /* 画面をクリアする */
printf("\x1b35mピンク"); /* "ピンク"という文字をピンク色で表示する */
なので期待する実行画面は
------------------------------------
ピンク(←ピンク色で)
------------------------------------
とやりたいのですが
現状ですと
------------------------------------
←[2J←[35mピンク(←白色で)
------------------------------------
となってしまい期待通りの実行結果が得られないので
どなたか良きアドバイスを!!ということです。
No.2
- 回答日時:
エスケープシーケンスを使って画面を消したり、色を変えようと
なさっていると思いますが、DOSプロンプトでは出来なかった
ような気がします。MS-DOSとかPC-DOSでは使えますが・・・
あと、「む」で「¥」が表示されるのは、お使いのキーボードを
Windowsが英語版のキーボードと認識している、と思われます。
そうそうエスケープシーケンス(制御文字)とかいうやつです。
有力な情報ありがとうございます。
しかし私にはさらなる疑問が…
PC-DOSってはじめて聞きました。これって何ですか?
あとWindows上ではキーボードは正常に動作してますが、
DOS窓とWin終了後のMS-DOSモードどちらともキーボードの認識が
おっしゃるように誤認しているようです。
DOS上のキーボードの認識を改める方法ってあるんでしょうか?
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.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人ではとても解決できなかったでしょう。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBユーザーフォームで時間入力
-
コマンドプロンプトが実行中か...
-
Tera Term Proに関する質問です。
-
ttlで戻り値を取得する方法
-
バッチファイルでキー操作を行う。
-
dosバッチ起動後、画面を閉じな...
-
コマンドプロンプトで表示が多...
-
VB2008の初心者です。VB6のツ...
-
AcceccDataSourceに対する任意...
-
ディスクの空き容量を取得する...
-
dd for windowsで教えてください
-
VBでネットワーク上のコンピュ...
-
目のマークを削除したい
-
Excel画面の左下隅のコメント操作
-
コンボボックス(最終行取得)
-
excel-vbaで作成したマクロを別...
-
ExcelVBAでDOSコマンドの標準出...
-
【Teratermマクロ】文字列の一...
-
コマンドラインからのIPアドレ...
-
N88 BASIC リスト表示方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでキー操作を行う。
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
ttlで戻り値を取得する方法
-
別のユーザーフォームのコマン...
-
VBユーザーフォームで時間入力
-
Tera Term Proに関する質問です。
-
コマンドプロンプトですべてのU...
-
コマンドキーがないんですけど...
-
TEXの表の位置が・・・
-
ルーターにつながっている全て...
-
デフォルトのショートカットキ...
-
dosバッチ起動後、画面を閉じな...
-
文字の点滅はどうやるのですか?
-
EEPROMのデータの初期化について
-
RTX1100の削除コマンド
-
JP1起動バッチについて
-
コンボボックス(最終行取得)
-
makeコマンドのエラー
-
ディスクの空き容量を取得する...
おすすめ情報