- ベストアンサー
C言語関数の読み込みエラー
- ゲームのプログラムでのダメージ計算量を計算する関数が読み込まれていないようです。
- コンパイラーに関数が読み込まれていないか確認しましたが、表示されていませんでした。
- 配列や構造体に関連する変更が必要かもしれません。具体的な変更箇所はわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>printf("a2\n");を関数内に用いて、実際にcompatibility関数を読み込んでいるのか確かめたのですが、コンパイラーにそう表示されることなく、関数を読み込んでいないのではと判断したしだいです。 であれば「damage()関数そのものが呼び出されて無い」と思います。 int damage(int i, int a[2][3], struct monster monster[], int b[2]) { int add; double damage; int s, t, u; の直後に printf("d1\n"); と入れて「damage()関数が本当に呼び出されているのかどうか?」を確かめましょう。 「d1」と言う表示が行なわれず、damage()関数が呼ばれていないようなら、更に「damage()関数を呼び出している上位の関数が、ちゃんと呼び出されているかどうか?」を、同じような方法で確かめ、更にその上位関数も同じように確かめましょう。 そうすれば「この関数まではきちんと呼び出されているが、ここに来た時点で、この関数が呼ばれてない」ってのが確認できる筈です。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8800/19959)
追記。 蛇足ですが、compatibilityとか、damageとか「一般的な名詞のみの関数名」は、使用しない方が良いです。 もし「同名の関数が、標準ライブラリに存在したり、拡張ライブラリに存在したりする」と自作関数ではなく、既存の同名のライブラリが呼ばれてしまい、意図した結果にならなくなる可能性があります。 こういう「独自の関数」を作る場合は「Player_Damage()」とか「Enemy_Damage()」とか「絶対に他では使われてないだろう関数名」にしましょう。
お礼
ありがとうございます! 以後、プログラミングの練習をする際は気をつけるようにします^^
- 8shi8
- ベストアンサー率32% (90/274)
質問内容がちょっと間違っていると思いますので確認します。 コンパイラーにprintf("a2\n");の結果が表示されることはありません。 コンパイラーはCのコードをコンピュータが実行可能な形に変更してくれるだけです。 なので、コンパイルした結果として実行時にprintf("a2\n");の結果である"a2"がコンソールに表示されないという事でまちがいないでしょうか? だとするとdamage関数がcompatibility関数を呼び出していて、ここに書かれている部分コードの通りだとするとdamage関数が呼び出されていないという事になります。 チェックをするにはdamage関数のs = (i+1) % 2;の行の前に同様にprintf文を追加してみてはいかがでしょうか? プログラムの実行結果で、追加したprintfの出力結果がコンソールに表示されないようであればdamage関数を呼び出している箇所をチェックしてみてください。
お礼
ご指摘、ありがとうございます! おっしゃるとおり、damage関数内を見直したら無事動きました!
お礼
ご指摘、ありがとうございます! damage関数の中身を変えたところ、ちゃんと機能いたしました!