![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.4ベストアンサー
- 回答日時:
★『gcc』には詳しくないので参考までに。
・『gcc』で Windows のコンソール・アプリケーション(CUI)で作成していますか?
WinMain 関数のエラーが出るということは、GUI で作成しているのかな。→CUIに変更してみる。
『gcc』でもWindows のコマンド・プロンプトから実行できるコンソール・アプリケーションが
作成できると思いますので、その設定にして下さい。もしも、GUI で作成する場合は、main の
関数ではなく、WinMain 関数に記述します。
・また、前回紹介した関数は Win32 API ですので、API 関数を利用できる環境(SDK)などが
インストールされている必要があります。
・とりあえず、下のサンプルがコンパイルできますか試して下さい。→CUI に変更した後に。
サンプル:
#include <stdio.h>
#include <windows.h>
#define SPC (0x20)
#define ATR (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
// 画面消去(ESC [2J)と等価
void cls( void )
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD coord;
HANDLE hOut;
DWORD dwWrite;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
GetConsoleScreenBufferInfo( hOut, &csbi );
dwWrite = (csbi.dwSize.X * csbi.dwSize.Y);
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition( hOut, coord );
SetConsoleTextAttribute( hOut, ATR );
FillConsoleOutputCharacter( hOut, SPC, dwWrite, coord, NULL );
FillConsoleOutputAttribute( hOut, ATR, dwWrite, coord, NULL );
}
int main( void )
{
printf( "画面を消去します - Pause -" );
getchar();
cls();
return( 0 );
}
最後に:
・main 関数を利用したい場合は、Windows のコンソール・アプリケーション(CUI)で
作成して下さい。プログラムを CUI に変更すれば、回答者 No.2 さんのアドバイス
でも上手くエスケープシーケンスが利用できると思います。
・『This Program cannot be run in DOS mode.』というエラーはこのプログラムは
DOS モードで実行できません。という意味です。→Windows の GUI 用に作られた
場合は実行できないのです。
・DOS プロンプトでも実行可能なコンソール・アプリケーション(CUI)に変更して下さい。
・以上。参考に!→『gcc』は詳しくないため設定方法が分かりません。頑張って下さい。
No.3
- 回答日時:
★ヒント
・MS-DOS の OS ではエスケープシーケンスは利用できますが、Windows のコンソールでは
利用できません。DOS/V機(今のWindowsパソコン)では、エスケープシーケンスを利用するための
デバイスドライバなどを組み込めば利用できる。という事を昔、聞いた事があります。
最近ではコンソール・アプリケーションを作成していませんし、エスケープシーケンスも使おうとも
思わないせいか詳細な方法は分かりません。その代わりに下の関数で消去可能です。
・『FillConsoleOutputCharacter()』関数で指定座標から指定文字数だけ書き込む(消去)が可能です。
MS-DOS の OS ではないため、エスケープシーケンス全部が上手く利用できません。
・回答者 No.2 さんの情報と次のリンクを参考にして下さい。
リンク:
・http://www.kumei.ne.jp/c_lang/intro/no_61.htm→『第61章 コンソールアプリで画面消去』
・http://www.kumei.ne.jp/c_lang/intro/no_58.htm→『第58章 コンソールアプリで文字色を変える』
・http://www.kumei.ne.jp/c_lang/intro/no_59.htm→『第59章 コンソールアプリで簡易時計を作る』
関連関数:
・GetStdHandle() // スクリーンバッファの取得
・SetConsoleTextAttribute() // テキスト色を設定
・SetConsoleCursorPosition() // カーソル位置を設定
・FillConsoleOutputCharacter() // 指定座標から指定文字数だけ書き込む
・FillConsoleOutputAttribute() // 色と背景色
その他:
・面倒ですが上記の関数などでエスケープシーケンスと同じ動作を行えます。
なお、#include <windows.h> をヘッダ部に記述しないと利用できませんので注意!
・以上。参考に!
この回答への補足
ありがとうございます。
試してみましたが、今度は
winmingw-32.a(main.o): undefined reference to "WinMain@16"
というエラーが出てしまいました。
windows.hのバグなんでしょうか?
No.2
- 回答日時:
Windows 2000/XPの『コマンドプロンプト』でご質問のプログラムを実行しても、画面は消去されませんョ。
『コマンドプロンプト』では、ANSIエスケープ・シーケンスはサポートされていないのです。
2000/XPで、ANSIエスケープ・シーケンスを利用したい場合には、"%SystemRoot%\system32\config.nt"ファイルに、
device=%SystemRoot%\system32\ansi.sys
を追加後、"cmd.exe"ではなく"command.com"を起動します。
『Microsoft Support Online:How to Enable ANSI.SYS in a Command Window』
http://support.microsoft.com/kb/101875/en-us/
『答えてねっと:command.comでエスケープシーケンスを使う方法。』
http://www.kotaete-net.net/Default.aspx?pgid=14& …
この回答への補足
ありがとうございます。
deadlineさんのおっしゃった通りにやってみたのですが、今度は
This Program cannot be run in DOS mode.
と表示されて実行できませんでした。
どうすれば良いんでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excel vbaから実行するexe実行...
-
Visual Studio 「AnyCpu」について
-
「読み込み違反」が起きたとき...
-
Windows PowerShellでC言語を実...
-
エスケープ・シーケンスによる...
-
C#VB、exeに埋め込んだexeの実行
-
VB6.0 exe作成時に実行時エラー...
-
ActiveDirectoryから値を取得
-
clickonceの使い方
-
VB.NetのWinsockについて
-
VBで「ファイル名を指定して実...
-
VBコンソールアプリケーション...
-
system関数(Windows)の戻り値!!
-
Eclipse CDT MinGWによるC言語
-
VB6 EXEとプログラムの違い
-
VB2005 Vistaで印刷ができません
-
visual c++ 2008 にてhello wo...
-
実行ファイル(.exe)が別のPC...
-
アウトルックが起動しているか...
-
chatgpt 4oを使っています。あ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「読み込み違反」が起きたとき...
-
Visual Studio 「AnyCpu」について
-
Windows PowerShellでC言語を実...
-
excel vbaから実行するexe実行...
-
実行ファイル(.exe)が別のPC...
-
C++初心者です。 debug asserti...
-
Format 関数のバグ?
-
C#VB、exeに埋め込んだexeの実行
-
VisualStudioでC#が実行できない
-
VB6.0 exe作成時に実行時エラー...
-
Pythonのコードをexe化
-
shell関数には二重引用符を渡せ...
-
ActiveDirectoryから値を取得
-
mscorlib.dllの初回例外について
-
ActiveX → VB を起動するとCre...
-
androidで.exeを実行できますか?
-
外部exe呼び出しの方法 ShellEx...
-
VBがデバッグ時落ちてしまう
-
Eclipse CDT MinGWによるC言語
-
ACCESSランタイムでエラー
おすすめ情報