前提・実現したいこと
簡単なゲームを作成しているのですが、うまく起動しません
発生している問題・エラーメッセージ
エラー:プレイヤー名を指定して起動してください の後に*** Puzzle & Monsters ***のプログラムに移行したいのですが 何を入力しても 内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。
該当のソースコード
/*** インクルード宣言 ***/ #include <stdio.h> /*** 列挙型宣言 ***/ /*** グローバル定数の宣言 ***/ /*** 構造体宣言 ***/ /*** プロトタイプ宣言 ***/ int goDungeon(char* playerName); int doBattle(char* playerName, char* enemyName); /*** 関数宣言 ***/ int main(int argc, char**argv) { if (argc != 2) { printf("エラー:プレイヤー名を指定して起動してください\n"); return 1; } printf("*** Puzzle & Monsters ***\n"); int winCount = goDungeon(argv[1]); if (winCount == 5) { printf("***ゲームクリア!***\n"); } else { printf("***ゲームオーバー***\n"); } printf("倒したモンスター数=%d\n", winCount); return 0; } int goDungeon(char* playerName) { printf("%sはダンジョンに到着した\n", playerName); int winCount = 0; winCount += doBattle(playerName, "スライム"); winCount += doBattle(playerName, "ゴブリン"); winCount += doBattle(playerName, "オオコウモリ"); winCount += doBattle(playerName, "ウェアウルフ"); winCount += doBattle(playerName, "ドラゴン"); printf("%sはダンジョンを制覇した!\n", playerName); return winCount; } int doBattle(char*playerName, char*enemyName) { printf("%sが現れた!\n", enemyName); printf("%sを倒した!", enemyName); return 1; }
試したこと
色々な数字や文字を入力しました。
補足情報(FW/ツールのバージョンなど)
エディタはVScode
コンパイルはgccを使用しています。
コンパイルしましたか?
~.exe が生成されていますか?
~.exe を実行しましたか? このとき引数を与えましたか?
.exeファイルは生成されていますが
実行というのはどうすればいいのでしょうか?
どのように実行していますか?
code runner などを使用していると、引数を自由に渡せないので、ターミナルで直接 .exe を実行してはどうでしょうか?
C言語のソースファイルをデスクトップに保存してから、コマンドプロンプトで下記を実行してみてください (XXXは、実際のユーザー名に合わせてください)
cd C:\Users\XXX\Desktop
gcc ソースコードファイル名
a.exe プレイヤー名
>Bull
直接.exeを実行したのですが'.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示されました。
>jbpb0
gcc ソースコードファイル名を入力しても
gcc: error: pazzgame: No such file or directory
gcc: fatal error: no input files
compilation terminated.
と表示されました。
> '.exe' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
「a.exe」を実行しました? (「a」を付けました?)
【追記】 「a」ではないかもしれませんが、何かファイル名が付いてるはずですので、それを付けて実行してください
はい。test.exeだったためそれを実行しました。
> gcc: error: pazzgame: No such file or directory
gcc実行前に、
dir
を実行して、そこにソースコードファイルがあるかを確認してください
あと、コンパイル時には、ソースコードファイル名の拡張子を付けてますよね?
gcc pazzgame.c
みたいに
【追記】 exeファイルの実行前も、
dir
を実行して、そこにexeファイルがあるかを確認して、exeファイル名(a.exeとかtest.exeとか)も確認して、確認したexeファイル名を実行してください
dirを実行すると
0 個のファイル 0 バイト
と表示されました。
これはソースコードファイルが入っていないということでしょうか?
デスクトップ上にはソースコードファイルが存在しているのですが。
> 0 個のファイル 0 バイト
よりもちょっと上に「...のディレクトリ」と書かれてるはずですが、そこが
C:\Users\XXX\Desktop のディレクトリ
になってますか?
なっています。
前の質問
https://teratail.com/questions/336125
の時は、ソースコードファイルをデスクトップに置いて、そこにcdして、gccでコンパイルしてa.exeを作れましたよね?
その時と、何が違うのでしょうか?
わからないです。。
もう一度VScodeをアンインストールして環境開発を一からやり直した方がいいですかね?
前の質問のやり取りを読み返したら、OneDriveでデスクトップとかドライブとかを共有してるようですね
その場合は、デスクトップにcdするには、下記にようにやるのかもしれません
cd C:\Users\XXX\OneDrive\Desktop
あるいは
cd C:\Users\XXX\OneDrive\デスクトップ
私はそういう使い方をしてないので、どうすればいいのかよく分からないのですが、上記のようにcdをやってみてからdirで確認してみてください
dirでソースコードファイルが確認できたら、その状態ならgccの実行ができるはずです
【追記】 OneDriveでデスクトップを共有してるパソコンがあったので、調べました
下記のようにすれば、見えてるデスクトップにcdできるようです
cd C:\Users\XXX\OneDrive\Desktop
そうすれば、
> デスクトップ上にはソースコードファイルが存在しているのですが。
がdirで確認できて、gccでのコンパイルや、exeファイルの実行ができると思います
上記の方法でgccの実行ができました。
ですがtest.exeは内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とでます。
gccの実行後に、再度
dir
で、exeファイル名を確認してください
おそらく、test.exeではなくa.exeができてるはず
a.exeができていて実行しました。
すると繧ィ繝ゥ繝シ・壹・繝ャ繧、繝、繝シ蜷阪r謖・ョ壹@縺ヲ襍キ蜍輔@縺ヲ縺上□縺輔>
といった文字化けのようなものが出てきました。
exe実行前に、
chcp 65001
を実行してみてください
https://www.javadrive.jp/command/display/index5.html#section3
【追記】 もう一つ
a.exe プレイヤー名
の「プレイヤー名」には、日本語を使わないでください
エラー:プレイヤー名を指定して起動してください
と表示されました。
このプレイヤー名指定というのがわかりません。
引数を正しく指定するということだと思うのですがargc != 2の2を入力するということでしょうか?
それとはまた別に自分でどこかに引数を指定してそれを入力するということでしょうか?
コマンドプロンプトで
a.exe プレイヤー名
のように実行するのです
まず、キーボードで「a.exe」を入力し、次に「半角スペース」を一つ入力して、その次に「プレイヤー名」を何か入力してから、リターンキーを叩く
「プレイヤー名」は何でもいいですが、とりあえず日本語は使わず、まずは半角英字(アルファベット)だけで試してみてください
(自分の名前のローマ字表記とか)
あと、プレイヤー名にはスペースを入れないでください
連続するアルファベットのみ
できました!
前の質問に引き続き丁寧に対応して頂きありがとうございます。
二つともjbpb0さんのおかげで解決できました。
そしたら、「プレイヤー名」に日本語を使って、どうなるのか試してみてください
日本語を使用すると
太郎縺ッ繝繝ウ繧ク繝ァ繝ウ縺ォ蛻ー逹縺励◆
繧ケ繝ゥ繧、繝縺檎樟繧後◆・・
繧ケ繝ゥ繧、繝繧貞偵@縺滂シ√ざ繝悶Μ繝ウ縺檎樟繧後◆・・
繧エ繝悶Μ繝ウ繧貞偵@縺滂シ√が繧ェ繧ウ繧ヲ繝「繝ェ縺檎樟繧後◆・・
繧ェ繧ェ繧ウ繧ヲ繝「繝ェ繧貞偵@縺滂シ√え繧ァ繧「繧ヲ繝ォ繝輔′迴セ繧後◆・・
繧ヲ繧ァ繧「繧ヲ繝ォ繝輔r蛟偵@縺滂シ√ラ繝ゥ繧エ繝ウ縺檎樟繧後◆・・
繝峨Λ繧エ繝ウ繧貞偵@縺滂シ¢セ郎縺ッ繝繝ウ繧ク繝ァ繝ウ繧貞宛隕・@縺滂シ・
***繧イ繝シ繝繧ッ繝ェ繧「・・**
蛟偵@縺溘Δ繝ウ繧ケ繧ソ繝シ謨ー・・
といったような文字化けが出てきました。
chcp 65001を実行するのを忘れていました。
名前のところだけE^Eといったような文字が出てきました。
exe実行前に
chcp 65001
を実行しておくと、プレイヤー名以外の日本語表示は大丈夫だけど、プレイヤー名だけは文字化けする、ということですか?
はい。そういうことです。
プレイヤー名とユーティリティ関数宣言宣言の部分が文字化けします。
https://teratail.com/questions/336873
に書いてあるように、コマンドプロンプトで日本語をキーボード入力するのは、問題があるようです
日本語の表示は問題無いのですが
そうですか。。
ありがとうございます!