• ベストアンサー

”カラー表示プログラム”のソースコードは何を実現するものなの

以下のプログラムは ”カラー表示プログラム”であるとかいてありましたので、これを記述して color。cpp  の名前で保存してコンパイルしてから #include <stdio.h> main() { printf("\x1b[4;36mColor Sample\x1b[4;m\n"); printf("\x1b[31mRed\n"); printf("\x1b[32mGreen\n"); printf("\x1b[33mYerrow\n"); printf("\x1b[34mBlue\n"); printf("\x1b[35mMagenta\n"); printf("\x1b[36mCyan\n"); printf("\x1b[37mWhite\n"); } 以下の  color.exe  をDOSで実行しましたら次のようになりました。 "\My Documents\C\color.exe" Color Sample Red Green Yerrow Blue Magenta Cyan White てっきり、カラー表示の帯のようなものができると、思っていましたが、色番の数字と m が再現されただけでした。  一体 これは 私の思い違いなのでしょうか? そもそもこの”カラー表示プログラム”のソースコードは何を実現するものなのでしょうか?  c言語はまだ始めたばかりで、つまずいてしまいました。「ひまわり」という日本語で記述できる簡単なプログラム などを参照しながら、同じようなことがないのかみてみましたが、文字色の変更、とか 色の番号を出すとかありますが、上のようなものは見当たりません。  つまずくと、先に進むのが、億劫になります。この基礎的な(たぶん)ことを教えていただければ ありがたいのですが。ちなみにこのことが書いてあるのは、『はじめてのc言語」  秀和システム 佐々木 整 1995・9 の本です。 このテキスト画面では、 ”color.exe" の実行画面の各行の先頭がおかしく表現されますが、正しくは、 ┛の左先に矢印←が付いたものです。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

実行しているPCがDOS/Vマシンで、Windows95かWindows98(98SE含む)であれば、以下の方法で正しく色付き文字が表示されます。 1.C:\CONFIG.SYSに以下の1行を書き加える devicehigh=C:\WINDOWS\COMMAND\ansi.sys 2.C:\WINDOWS\COMMAND\のフォルダにansi.sysと言うファイルがあるか確認する。無いなら、そのフォルダにansi.sysファイルを置く 3.PCを再起動してMS-DOSプロンプトを開く 4.color.exeを実行する

koro5917
質問者

補足

 windows 98でCONFIG.SYSの展開がうまく出来ませんでした。Ms-Dosで昔よくやっていたはずなのに!  でも、とりあえずは、出来ました。 一応lanでつないである98とファイルをそのまま持っていって、Dosの画面に”color.exe” を ドラック&ドロップで乗せてから、enter キーで、きれいにカラーの文字で縦にColor Sample(水色)、Red(あか)、 Green(緑)、Yerrow(黄)、Blue(青)、Magenta(紫)、Cyan(水色)、White(しろ)となってます。 1,2 の指摘の操作は一切しませんでした。まぁ!出来なかったのですが。  でも、ありがとうございます。

その他の回答 (2)

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

WindowsXPで確認しました。 1.16ビットのコンパイラ(TurboC++4.0J)でソースをコンパイルしてColor.exeを作成する。 2.「C:\WINDOWS\system32\CONFIG.NT」 のファイルの最後に、次の1行を追加する。 DEVICEHIGH=%SystemRoot%\System32\ansi.sys 3.cmd.exeでなく、command.comを実行したDOS環境で、Color.exeを実行する。 たぶん、16ビットのコンパイラを使う必要があると思います。32ビットBorland C++ 5.5(フリー) では、カラー表示しなかった。 参考URL: 英語版Turbo C 2.01(フリー) は16ビットコンパイラです。LSI C-86 Ver3.30試用版も16ビットコンパイラと思います。

参考URL:
http://www.sat.t.u-tokyo.ac.jp/~tetsuya/Computer/C++/
koro5917
質問者

お礼

windows xpでの実現は16ビットのコンパイラーが必要ということでTurbo C 2.01(フリー)にいって、とりあえずはダンロードしましたが、インストールするための方法が分からないため、途中であきらめてしまいました。#2の方の方法で、98を使って開きましたので、この辺で、ひとまずは納得しておきたいと思います。  16ビットのコンパイラーということを教えていただいて、感謝します。 ありがとうございました。

  • betagamma
  • ベストアンサー率34% (195/558)
回答No.1

えーと、はっきり言ってしまうと、そんなことは、C言語の本質とは何の関係もありません。 環境の問題です。これは、エスケープシーケンスと呼ばれるものです。DOSの画面といっても、色々な環境があります。 「はじめてのC言語」この本が書かれた頃には、おそらく、PC-9821がまだ広く使われていた時代ではなかったでしょうか?PC-9821, PC-9801シリーズのDOS環境は、かなり仕様が統一されていましたし、みんなこの機種を使っていたので、こういう本がかけたのです。 今は、PC-98x1シリーズは廃れてしまいましたし、DOSのバージョンも大きく変わってしまいました。 解説することもできますが、もう10年以上たとうとしている昔の環境の話です。今理解したところで、何の応用もできませんし、役に立ちません。 C言語の本質とは何の関係もありません。 for文、while文、ポインタ・配列などにさっさと進んじゃってください。

koro5917
質問者

補足

そうなんですか! ありがとうございます。 だそうとおもえばepson 286 等もありますが、必要なしですか?そのころはいそがしくて、ms dosさえもろくにやってませんでした。 只、このソースコードの意味は何なのでしょうか? 文字どうりエスケープシーケンスのなかの 文字に色をつける。 という項目です。文字に色をつける を実現するということでしょうか?  確かに、「ひまわり」では出来たのに、これでは出来ませんでした。要するにDosが違うということですね!NECのMs-Dos Ver.3 位の次代に帰ればいいと いうことでしょうか?

関連するQ&A

  • なぜこんなことに!?プログラム課題

    はじめまして。 C言語プログラムのことでわからないことがあり、みなさんの知恵を貸していただけないでしょうか?? int a = 3; int b = -5; int c = a / b; printf("a/b = %d\n", c); これを実行すると a/b = 0 となってしまいます! これはなぜなのでしょうか?? 頭が悪くて、恐縮ですが、好きな女の子に聞かれたときに きちんと答えて、かっこいいところを見せたいのです! みなさんのお力を貸していただければ幸いです。 よろしくお願い致します。

  • このプログラムみてもらえますか?

    課題は標準入力から正整数aを読み込み、aが素数であるか否か判定するプログラムを作れ、です。 #include <stdio.h> int main(void) { int a,b,c; for(;;){ printf("正整数を入力して下さい。\n"); scanf("%d",&a); c=a%b; for(b=2;b=a-1;b=b+1){ if(c==0) printf("素数でない。\n"); break; } printf("素数です。\n"); break; return(0); } } コンパイルはできますが、実行すると9が「素数です」と表示されます^^; よろしくおねがいします。

  • プログラムがうまくいきません。教えてください。

    プログラムがうまくいきません。教えてください。 #include <stdio.h> int main(void){ int a, b, c, d, f; printf("国語="); scanf("%d", &a); printf("算数="); scanf("%d", &b); printf("理科="); scanf("%d", &c); printf("社会="); scanf("%d", &d); f = ((a>90)?1:0)+((b>90)?1:0)+((c>90)?1:0)+((d>90)?1:0); printf("\n合計[%d],平均[%.2f]\n",(a+b+c+d),((double)(a+b+c+d)/4.0)); printf("国語[%d],[%.3f%%],[%d]\n",a,((double)a/1.5),((a>90)?1:0)); printf("算数[%d],[%.3f%%],[%d]\n",b,((double)b/1.5),((b>90)?1:0)); printf("理科[%d],[%.3f%%],[%d]\n",c,((double)c/1.5),((c>90)?1:0)); printf("社会[%d],[%.3f%%],[%d]\n",d,((double)d/1.5),((d>90)?1:0)); printf("総合判定[%d],\n", ((f>=3)?1:0)); return (0); } と入力したのですが、実行結果の国語から社会までの[]部分を上下揃えたいのですが揃いません。このプログラムにどのようなことを追加すれば揃えることができますか?教えてください!

  • プログラムの処理時間を表示する

    Windowsのコマンドプロンプトで,プログラムの処理時間を表示する事ってできますか? ---------- a.exe ampl cooksched.run b.exe ---------- というバッチファイルを実行しているのですが,この一連の処理をする時間を表示させたいです. ちなみにa.exeとb.exeはC言語で書いたものをcygwinでコンパイルしたものです. 2行目の[ampl cooksched.run]というのは,AMPLという言語のバッチファイルみたいなものです. 説明が下手ですみませんが,何か分からない事がありましたら補足いたしますのでよろしくお願いいたします.

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

  • 他の実行ファイルを実行するプログラム

    他の実行ファイルを実行するプログラムを作りたいです。 わかりにくいと思うので例を書いて説明します。 まずhello.cというプログラムがあったとします。 中身は -hello.c----------------- #include <stdio.h> main(){ printf("Hello!\n"); } -------------------------- これをコンパイルしてできた実行ファイルを他のプログラムから呼び出す?実行したいんです。 説明が下手ですいません(>_<) たとえば新しくexe.cというプログラムを作ります。 このexeを実行するとhello.exeが呼び出されて 結果的にhello.cの中身が実行されるような exe.cを作りたいです。 初歩的な質問ですいません。 どなたかアドバイスいただけないでしょうか(>_<)

  • C++でのプログラムについての質問です

    このような二次関数の解を求めるプログラムを作成したのですが、自作関数solveをvoid solve(double, double, double)のように変更し同じ動作をするように変更したいです どのようにへんこうすればよいでしょうか #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りとなる。\n"); if (a == 0.0) { if (b == 0.0) { printf("係数がおかしい\n"); exit(-1); } { x1 = -c / b; printf("解は%f です。\n", x1); exit(0); } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); if (D == 0.0) { printf("解は %f です。\n", x1); } else { printf("解は %f と %f です。¥n", x1, x2); } } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); printf("解は%.2f+%.2fi と%.2f-%.2fi \n", r1, r2, r1, r2); } } return 0; }

  • 整数を3つ読み込み、一番大きいものを表示するプログラム

    3つが違う数であるとしてこうしたんですが、 #include<stdio.h> int main() {int a,b,c; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if(a>b && a>c){ printf("%d\n",a);} if(b>a && b>c){ printf("%d\n",b); if(c>a && c>b){ printf("%d\n",c); }}return 0;} で、コンパイルはできたんですが、実行できません。3つの数値を入力してもその一番大きい数が出てきません。ifの条件は間違ってはいないと思うんですがやはり、最大が2つあるときのことを考えないとできませんか?

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • プログラムのソースコード記述のテキストについて

    例えばC言語のプログラムソースコードをCPad等のエディタに記述する際、エディタに書きこまれるアルファベット等のテキストにはやはりフォントという情報が付いており、これを実行する際にはプレーンテキストにするため、コンパイラが余分なフォントの情報を取り去ってくれるのでしょうか?

専門家に質問してみよう