• ベストアンサー

DOSの文字の色を変える方法。

C言語でDOSプログラムを作っているのですが、 文字の色を変えることはできるのでしょうか? #include <stdio.h> void main(){ printf("あいうえお"); } コンパイラはボーランドで、DOSはXPのものとし、 文字を赤くするとしたら上の例ならどのように 書けばよいのでしょう?

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

  • ベストアンサー
  • BPG
  • ベストアンサー率66% (10/15)
回答No.1

文字をカラーで表示するには ヘッダファイルconio.hで定義されているtextattr()を使います。 なのでconio.hをインクルードする必要があります。 色は0~15の整数値や記号で指定します。 0=BLACK 1=BLUE 2=GREEN など。 以上をふまえると以下のようなソースになります (緑色で表示します) 文字をカラーで表示する方法はコンパイラによって違うと聞くので試してみてください。 文字をカラーで表示するには ヘッダファイルconio.hで定義されているtextattr()を使います。 なのでconio.hをインクルードする必要があります。 色は0~15の整数値や記号で指定します。 0=BLACK 1=BLUE 2=GREEN 3=CYAN 4=RED 5=MAGENTA 6=BROWN 7=LIGHTGRAY など。 以上をふまえると以下のようなソースになります (緑色で表示します) 文字をカラーで表示する方法はコンパイラによって違うと聞くので試してみてください… #include<stdio.h> #include<conio.h> int main(){ textattr(2); textattr(GREEN); cprintf("あいうえお"); return 0; }

amazontester
質問者

お礼

大変わかりやすい説明をありがとうございます。 このやり方ならすぐに理解できました。 お陰でものすごく助かりました!!

その他の回答 (1)

回答No.2

こんにちは。 昔はエスケープシーケンスを利用してやっていたものですが…。 #1の方がおっしゃる方法が簡単で良いですが、以下のようなやり方もあります。ただし、Windows の DOS 窓で実行する場合に有効な手段です。 SetScreenTextAtrribute 関数を上手く使うと、テキストの背景色なども変更できます。 #include <windows.h> #include <stdio.h> #include <conio.h> int main(void) { HANDLE h; CONSOLE_SCREEN_BUFFER_INFO csbi; h = GetStdHandle(STD_OUTPUT_HANDLE); // 標準入出力へのハンドルを得る GetConsoleScreenBufferInfo(h, &csbi); // コンソールスクリーンバッファ(現在の状態)を得る SetConsoleTextAttribute(h, FOREGROUND_RED); // 文字色を赤に変更 printf("あいうえお\n"); return 0; }

amazontester
質問者

お礼

すばらしいです! ありがとうございます。 昔は確かにエスケープシーケンスで簡単にできてたみたいですね。今はもう出来ないのかと思ってました。 感謝します!。

関連するQ&A

  • DOS画面でテキストカーソルの位置を移動する(C言語)

     DOS用のC言語プログラムを作っています。そこで printf関数などで文字列を表示した後表示した文字列の 間に違う文字列を挿入したりしたいのですがそんなことは 可能でしょうか? #include <stdio.h> int main(void){ printf("13456789"); printf("2"); return 0; } というプログラムを作ったとして1と3の間に割り込んで2と 入れたい場合どうしたらよいでしょうか? 開発環境はwindowsXPでコンパイワはBorlandです。

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語 コンパイルエラー(文字列または文字定数が閉じていない)

    下記コードでコンパイルすると、コンパイルエラーとなります。試しに、"さようなら"を、"さような"に変更すると、コンパイルエラーは なくなります。どうして、コンパイルエラーとなるのか分からずに困っています。ちなみに、コンパイラは、ボーランドのものを使っています。 ▼エラーとなるコード #include <stdio.h> int main(void) { printf("こんにちは"); printf("さようなら"); return 0; } ▼コンパイルエラー内容 エラー E2380 sample08.c 7: 文字列または文字定数が閉じていない(関数 main ) エラー E2121 sample08.c 9: 関数呼び出しに ) がない(関数 main ) 警告 W8070 sample08.c 10: 関数は値を返すべき(関数 main )

  • 文字化け

    C言語初心者です。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("表示"); system("PAUSE"); return 0; } と書いてコンパイルしたのですが「表示」のところが文字化けしてしまいます。 他にも文字化けするかもしれないので、 解決法を教えて下さい。 使っているコンパイラは、Bloodshed Dev-C++です。

  • C言語での方向キー入力判定

    C言語でキーの入力判定をするプログラムを作ってい ます。下の例だとeやエンターを押したときは認識できる のに、方向キー↑を押したときはなぜか無反応です。 コンパイラはボーランドでOSはXPでコンパイルした のですが、何がいけなかったのでしょうか? #include <stdio.h> #include <conio.h> #include <windows.h> void check(void){ int key; key = getch(); switch (key){ case 'e': puts("e"); break; case VK_RETURN: puts("ENTER"); break; case VK_UP: puts("UP"); break; } } int main(void) { while(1){ check(); } return 0; }

  • #defineで置き換えられない

    C言語です。詳しい方、よろしくお願いします。 下記のプログラムをコンパイルして実行したら、画像のようになってしまいます。 コンパイラは、CPad for LSI C-86 ver2.31です。 #include<stdio.h> #define clr() printf("\x1b[2J") void main(void) { while(1){ clr(); printf("test"); } } #defineがどうも置き換えられていないようです。 詳しい方、考えられる原因を教えてください。 よろしくお願いします。

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • 小文字のみを数える方法

    小文字のみを表示させるプログラミングがいくらやってもできません。範囲指定をどこですれば良いのかわからず、全部の文字数をカウントしてしまいます。 ご指摘お願いします。 #include <stdio.h> #include <string.h> int main(void) { char str[256]; int a; printf("大文字と小文字をランダムに入力\n"); gets(str); printf("小文字の数は%dです\n",strlen(str),a); return(0); }

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

専門家に質問してみよう