質問するログイン新規登録
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

Q&A

解決済

1回答

597閲覧

C言語の将棋ゲームの先手と後手の選択について

todasan

総合スコア94

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

curses

cursesは、 UNIX 系列で使用される端末制御ライブラリです。CUI アプリケーションを作成するために使用されます。表示端末は多くの制御コードをサポートしており、カーソル移動や画面のスクロール、領域消去といった一般的な操作の実行が可能です。

0グッド

0クリップ

投稿2025/10/13 07:12

編集2025/10/13 07:14

0

0

実現したいこと

C言語で、将棋のゲームを作成しています。先手、後手を上、下釦で、選択して、
エンター釦を押し、先手か後手かを画面に表示して確定させたいです。
以下のプログラムで実施していますが、画像のようにフリーズしてしまいます。
shougi_boad.cのL27~L69に変更ソースがあります。何か解決方法があれば、
お聞きしてもよろしいですか。

・Makefile
https://www.mycompiler.io/view/Ag90sG2vfY2
・shougi_data.h
https://www.mycompiler.io/view/16sqlXezD9w
・shougi_main.c
https://www.mycompiler.io/view/3wfcsxSvq8n
・shougi_input.c
https://www.mycompiler.io/view/7ZSQIgfPioK
・shougi_boad.c
https://www.mycompiler.io/view/FRmtmrAE5nc
・shougi_highlight.c
https://www.mycompiler.io/view/Dg5hSIiseuP

イメージ説明

発生している問題・分からないこと

質問に詳細を記載した。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

質問に詳細を記載した。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2025/10/13 07:48 編集

手元の環境では応答待ちにはならずに先手・後手を選択する画面が表示されます。どちらかを選んでエンターキーを押すと盤面が表示されるのですが、この時点でキー入力を行うと再度先手・後手の選択場面に戻ってしまいます。これは、draw_board() 関数内に先手・後手を選択する処理を入れているためで、main 関数(shougi_main.c)の while ループ内で draw_board() 関数を呼び出しているためかと思われます。 while (1) { draw_board(); int ch = getch();
todasan

2025/10/13 09:41

melian さん 先手・後手を選択する部分も表示しないので、考えています。 はじめはdraw_board関数の前に、先手・後手を入れようとしていました。その時もプログラムは、停止したので、なかなかうまくできません。
melian

2025/10/13 10:18

こちらの環境は以下の通りです。(gcc と PDCurses は pacman コマンドでインストール) MSYS2 UCRT64 3.6.4-2 gcc 15.2.0 PDCurses 4.5.3-1
melian

2025/10/13 10:47

MSYS2 MINGW64 でビルドして実行すると再現しました。gdb で処理をトレースしてみると C:\WINDOWS\System32\KernelBase.dll 内の TlsGetValue() で無限ループに陥っている模様です。 $ gdb ./myapp.exe (gdb) run : warning: HEAP[myapp.exe]: warning: Invalid allocation size - 4000000000000001 (exceeded 7ffffffdefff) warning: Invalid parameter passed to C runtime function. warning: Invalid parameter passed to C runtime function. [New Thread 2420.0x16f4] Thread 5 received signal SIGINT, Interrupt. [Switching to Thread 2420.0x16f4] 0x00007ff95a4ad1c7 in TlsGetValue () from C:\WINDOWS\System32\KernelBase.dll (gdb) where #0 0x00007ff95a4ad1c7 in TlsGetValue () from C:\WINDOWS\System32\KernelBase.dll #1 0x00007ff95b367374 in KERNEL32!BaseThreadInitThunk () from C:\WINDOWS\System32\kernel32.dll #2 0x00007ff95ca9cc91 in ntdll!RtlUserThreadStart () from C:\WINDOWS\SYSTEM32\ntdll.dll #3 0x0000000000000000 in ?? () これはユーザ側ではどうにもできないので、差し支えがなければ MSYS2 UCRT64 に切り替えることをお勧めします。
todasan

2025/10/13 12:34

melian さん MSYS2 UCRT64はどのように切り替えましたか。gdbというのは、 どのようにインストールしましたか。 簡単でいいので、リンクでもお聞きしてもよろしいですか。
melian

2025/10/13 12:41

Windowsキーを押すとメニューが表示されますが、そこで「ここに入力して検索」と表示されているテキストボックスに "MSYS2" と入力すると検索結果の中に MSYS2 UCRT64 があるかと思いますので、そちらを実行してください。gdb のインストールは、 pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain を実行してください。
todasan

2025/10/14 08:02

melian さん MSYS2 UCRT64をvscodeで使用する方法は、分かりますか。 MSYS2 UCRT64を起動しましたが、C:\msys64\ucrt64\binなどに、 何もファイルがなく、簡単でいいので、どのように環境を作ったのか、 お聞きしてもよろしいですか。
melian

2025/10/14 08:17

> C:\msys64\ucrt64\binなどに、何もファイルがなく、 もしかしてmingw-w64-ucrt-x86_64-toolchainパッケージをインストールしていないのではないでしょうか。手元の環境ではこのパッケージをインストールするとC:\msys64\ucrt64\binにgccやgdbがインストールされました。
jimbe

2025/10/14 15:56

cygwin でも最初の melian さんのコメントと同じ動きで、フリーズ?はせず選択出来ています。
todasan

2025/10/15 03:39

melian さん mingw-w64-ucrt-x86_64-toolchainパッケージをインストール後、プログラムの停止は、 なくなりました。ありがとうございます。
todasan

2025/10/15 03:41

jimbe さん cygwinの環境はどのように、準備しましたか。簡単でいいので、お聞きしてもよろしいですか。 ucrt64ですと、makefileにrmコマンドが使えないので、cygwinの方がいいと、 思いました。
jimbe

2025/10/15 07:36 編集

>cygwinの環境はどのように、準備しましたか。 "cygwin install" で検索すると新旧いろいろ出てきますが、私が主に参考にしたのは以下の記事です。 【2023年10月版】WindowsへのCygwinのインストールとパッケージマネージャの設定 https://qiita.com/nouernet/items/271a285db517e4a25817 なお、ダウンロードサイトを適当な URL にしたら何故か色々入っていなくて、一旦全部消して他のサイト( https://ftp.jaist.ac.jp )からダウンロード・インストールし直す羽目になりました (><; 他にも幾つか Cygwin のインストールの記事を読み、インストーラや apt-cyg でパッケージを入れた気がしますが、覚えていません。 ( デフォルトで make はインストールされないとか見て "apt-cyg install make" とかしたような気もします。結局今はソースファイル1つしか無いので make 使って無いですが ^^;) いまインストーラで「選択したパッケージ」を見ると、 libncurses-devel と wget の二つが出て来ます。 他に、 Windows のシステム環境変数として CYGWIN_HOME にインストールフォルダ ( c:\cygwin64 )を設定、 path にその bin フォルダ ( c:\cygwin64\bin ) を追加しています。インストーラで追加されたのかな? Cygwin をインストールしたとして、 VisualStudioCode で Cygwin は使えるのでしょうか?
todasan

2025/10/15 07:55

jimbe さん 環境変数を設定すれば、使えると思っています。まだ確認はしていません。 Cygwin をchatgptで調べましたが、cursesだけがうまくできないので、 参考にはしてみます。
jimbe

2025/10/15 13:14

ちなみに私はソースファイルを Windows にインストールしたエディタ(Vim)で編集して、コンパイルと実行を cygwin のターミナルでやっています。 プログラムの実行時毎回 30秒くらい間があってからやっと curses の画面が出るので何やってるのか調べようかとも思ったのですが、多分ターミナルの何か(/etc/profileとか?)を探してタイムアウトとかだろうと思って取り合えず動くからヨシにしています。
melian

2025/10/15 14:28

> ucrt64ですと、makefileにrmコマンドが使えないので、 状況がよく判らないのですが、make と rm コマンドは C:\msys64\usr\bin\ にあります。 $ cygpath -w /usr/bin/make C:\msys64\usr\bin\make.exe $ cygpath -w /usr/bin/rm C:\msys64\usr\bin\rm.exe make.exe は make package に、rm.exe は coreutils package に含まれていますが、これらのパッケージはデフォルトでインストールされているはずです。
guest

回答1

0

自己解決

MSYS2 UCRT64の環境で、実施したら、プログラムの停止にはならなくなりました。

投稿2025/10/15 07:12

todasan

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問