質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
C

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

Q&A

3回答

1037閲覧

C言語 プログラムが起動しない

ryouk

総合スコア4

C

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

0グッド

0クリップ

投稿2021/05/09 06:45

前提・実現したいこと

簡単なゲームを作成しているのですが、うまく起動しません

発生している問題・エラーメッセージ

エラー:プレイヤー名を指定して起動してください の後に*** 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を使用しています。

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

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

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

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

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

episteme

2021/05/09 06:49 編集

コンパイルしましたか? ~.exe が生成されていますか? ~.exe を実行しましたか? このとき引数を与えましたか?
ryouk

2021/05/09 07:00

.exeファイルは生成されていますが 実行というのはどうすればいいのでしょうか?
Bull

2021/05/09 11:30

どのように実行していますか? code runner などを使用していると、引数を自由に渡せないので、ターミナルで直接 .exe を実行してはどうでしょうか?
jbpb0

2021/05/09 21:49

C言語のソースファイルをデスクトップに保存してから、コマンドプロンプトで下記を実行してみてください (XXXは、実際のユーザー名に合わせてください) cd C:\Users\XXX\Desktop gcc ソースコードファイル名 a.exe プレイヤー名
ryouk

2021/05/10 01:30

>Bull 直接.exeを実行したのですが'.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示されました。
ryouk

2021/05/10 01:32

>jbpb0 gcc ソースコードファイル名を入力しても gcc: error: pazzgame: No such file or directory gcc: fatal error: no input files compilation terminated. と表示されました。
jbpb0

2021/05/10 01:41 編集

> '.exe' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 「a.exe」を実行しました? (「a」を付けました?) 【追記】 「a」ではないかもしれませんが、何かファイル名が付いてるはずですので、それを付けて実行してください
ryouk

2021/05/10 01:45

はい。test.exeだったためそれを実行しました。
jbpb0

2021/05/10 01:58 編集

> gcc: error: pazzgame: No such file or directory gcc実行前に、 dir を実行して、そこにソースコードファイルがあるかを確認してください あと、コンパイル時には、ソースコードファイル名の拡張子を付けてますよね? gcc pazzgame.c みたいに 【追記】 exeファイルの実行前も、 dir を実行して、そこにexeファイルがあるかを確認して、exeファイル名(a.exeとかtest.exeとか)も確認して、確認したexeファイル名を実行してください
ryouk

2021/05/10 02:00

dirを実行すると 0 個のファイル 0 バイト と表示されました。 これはソースコードファイルが入っていないということでしょうか? デスクトップ上にはソースコードファイルが存在しているのですが。
jbpb0

2021/05/10 02:04

> 0 個のファイル 0 バイト よりもちょっと上に「...のディレクトリ」と書かれてるはずですが、そこが C:\Users\XXX\Desktop のディレクトリ になってますか?
ryouk

2021/05/10 02:05

なっています。
jbpb0

2021/05/10 02:20

前の質問 https://teratail.com/questions/336125 の時は、ソースコードファイルをデスクトップに置いて、そこにcdして、gccでコンパイルしてa.exeを作れましたよね? その時と、何が違うのでしょうか?
ryouk

2021/05/10 02:31

わからないです。。 もう一度VScodeをアンインストールして環境開発を一からやり直した方がいいですかね?
jbpb0

2021/05/10 02:58 編集

前の質問のやり取りを読み返したら、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ファイルの実行ができると思います
ryouk

2021/05/10 03:00

上記の方法でgccの実行ができました。 ですがtest.exeは内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでます。
jbpb0

2021/05/10 03:02

gccの実行後に、再度 dir で、exeファイル名を確認してください おそらく、test.exeではなくa.exeができてるはず
ryouk

2021/05/10 03:10

a.exeができていて実行しました。 すると繧ィ繝ゥ繝シ・壹・繝ャ繧、繝、繝シ蜷阪r謖・ョ壹@縺ヲ襍キ蜍輔@縺ヲ縺上□縺輔> といった文字化けのようなものが出てきました。
ryouk

2021/05/10 03:19

エラー:プレイヤー名を指定して起動してください と表示されました。 このプレイヤー名指定というのがわかりません。 引数を正しく指定するということだと思うのですがargc != 2の2を入力するということでしょうか? それとはまた別に自分でどこかに引数を指定してそれを入力するということでしょうか?
jbpb0

2021/05/10 03:25 編集

コマンドプロンプトで a.exe プレイヤー名 のように実行するのです まず、キーボードで「a.exe」を入力し、次に「半角スペース」を一つ入力して、その次に「プレイヤー名」を何か入力してから、リターンキーを叩く 「プレイヤー名」は何でもいいですが、とりあえず日本語は使わず、まずは半角英字(アルファベット)だけで試してみてください (自分の名前のローマ字表記とか) あと、プレイヤー名にはスペースを入れないでください 連続するアルファベットのみ
ryouk

2021/05/10 03:27

できました! 前の質問に引き続き丁寧に対応して頂きありがとうございます。 二つともjbpb0さんのおかげで解決できました。
jbpb0

2021/05/10 03:29

そしたら、「プレイヤー名」に日本語を使って、どうなるのか試してみてください
ryouk

2021/05/10 05:18 編集

日本語を使用すると 太郎縺ッ繝€繝ウ繧ク繝ァ繝ウ縺ォ蛻ー逹€縺励◆ 繧ケ繝ゥ繧、繝縺檎樟繧後◆・・ 繧ケ繝ゥ繧、繝繧貞€偵@縺滂シ√ざ繝悶Μ繝ウ縺檎樟繧後◆・・ 繧エ繝悶Μ繝ウ繧貞€偵@縺滂シ√が繧ェ繧ウ繧ヲ繝「繝ェ縺檎樟繧後◆・・ 繧ェ繧ェ繧ウ繧ヲ繝「繝ェ繧貞€偵@縺滂シ√え繧ァ繧「繧ヲ繝ォ繝輔′迴セ繧後◆・・ 繧ヲ繧ァ繧「繧ヲ繝ォ繝輔r蛟偵@縺滂シ√ラ繝ゥ繧エ繝ウ縺檎樟繧後◆・・ 繝峨Λ繧エ繝ウ繧貞€偵@縺滂シ¢セ郎縺ッ繝€繝ウ繧ク繝ァ繝ウ繧貞宛隕・@縺滂シ・ ***繧イ繝シ繝繧ッ繝ェ繧「・・** 蛟偵@縺溘Δ繝ウ繧ケ繧ソ繝シ謨ー・・ といったような文字化けが出てきました。 chcp 65001を実行するのを忘れていました。 名前のところだけE^Eといったような文字が出てきました。
jbpb0

2021/05/10 07:10

exe実行前に chcp 65001 を実行しておくと、プレイヤー名以外の日本語表示は大丈夫だけど、プレイヤー名だけは文字化けする、ということですか?
ryouk

2021/05/11 05:00

はい。そういうことです。
ryouk

2021/05/11 06:25

プレイヤー名とユーティリティ関数宣言宣言の部分が文字化けします。
jbpb0

2021/05/11 12:26 編集

https://teratail.com/questions/336873 に書いてあるように、コマンドプロンプトで日本語をキーボード入力するのは、問題があるようです 日本語の表示は問題無いのですが
ryouk

2021/05/12 05:33

そうですか。。 ありがとうございます!
guest

回答3

0

if (argc != 2) { printf("エラー:プレイヤー名を指定して起動してください\n"); return 1; }

起動時のコマンドライン引数が異常だとそのメッセージを出して、returnするので、
この時点でプログラムは終了しています。
その後何を入力しても、それはプログラムにではなく、コンソール(OS)に対する入力になります。

起動時に引数を正しく指定してください。

投稿2021/05/09 06:58

amiya

総合スコア1218

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

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

ryouk

2021/05/09 07:12

引数を正しく指定とは何を指定すればいいのでしょうか?
amiya

2021/05/09 07:15

これ、自分で書いたプログラムなのではないのでしょうか? 何をどう入れれば良いかを一番よく知っているのは、プログラムを書いた自分自身のはずなのですが…。 引数に何を入れれば良いかは、あなたが引数にどんな役割を持たせようとプログラムを書いたか次第です。 どのような役割を引数に与えたのでしょう?答えはそれ次第です。
guest

0

コマンドプロンプトで下記を実行してみてください
ただし、「プレイヤー名」には日本語を使わないでください

chcp 65001
cd ソースコードファイルがあるディレクトリパス
gcc ソースコードファイル名
a.exe プレイヤー名

投稿2021/05/16 07:32

jbpb0

総合スコア7653

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

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

0

myrpg 勇者タケル

というように実行ファイル名のあとにプレーヤー名を指定せずに起動すると、

エラー:プレイヤー名を指定して起動してください
と表示した後、プログラムは終了してコマンドプロンプトに戻ります。

そうなっているのではないでしょうか。
メッセージに従って、プレーヤー名を指定して起動しましょう。

投稿2021/05/09 07:02

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問