構造体内でのポインタを使った計算が分からない

実現したいこと

「C言語プログラミング基本例題88+88(コロナ社)」を使用し勉強中のものです。
このプログラムは、ロールプレイングゲーム風でモンスターのHPがゼロになるまで、攻撃するように作っています。モンスターのHP、自分の与えるダメージはランダムにしています。

関数int hit内で実現したい処理:(モンスターのHP) - (ダメージ数)の計算をHPがゼロになるまで行い、ゼロになったら「モンスターを倒した」と表示させたいです。

そもそもポインタ型を引数に使わない方が楽そうな気がしましたが、条件に「int hit(struct monster *p, int damage) を使用すること」があるため、ポインタ型を使って組みたいです。

コーディングルールに則っていない煩雑なコードで申し訳ありませんが、お教え頂ければ幸いです。

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

ポインタ型をint型と計算できるようにする書き方が分からないです。

エラーメッセージ

error

1Main.c:23:15: error: expected ')' 2 int(*p.hp) -= damage; //残りHP 3 ^ 4Main.c:23:12: note: to match this '(' 5 int(*p.hp) -= damage; //残りHP 6 ^ 7Main.c:23:20: error: invalid '-=' at end of declaration; did you mean '='? 8 int(*p.hp) -= damage; //残りHP 9 ^~ 10 = 11Main.c:23:14: warning: incompatible integer to pointer conversion initializing 'int (*)' with an expression of type 'int'; take the address with & [-Wint-conversion] 12 int(*p.hp) -= damage; //残りHP 13 ^ ~~~~~~ 14 & 15Main.c:25:12: error: expected expression 16 }while(int(*p.hp) > 0); 17 ^ 18Main.c:25:12: error: expected ')' 19Main.c:25:11: note: to match this '(' 20 }while(int(*p.hp) > 0); 21 ^ 221 warning and 4 errors generated.

該当のソースコード

C

1#include <stdio.h>2#include <stdlib.h>3#include <time.h>4 5int hit_damage;6 7struct monster {8 char name[100];9 int hp, mp; //HP,MP10};11 12int damage_random(){13 14 srand(time(0));15 hit_damage = rand() % 21; //max 20 damage16 return hit_damage;17};18 19int hit(struct monster *p, int damage) {20 21 do{22 printf("%sに %dダメージ!\n", p->name, damage);// damage log23 int(*p.hp) -= damage; //残りHP24 damage = damage_random();25 }while(int(*p.hp) > 0);26 printf("%sを たおした!\n", p->name); //kill log27};28 29int main(void){30 31 srand(time(0));32 struct monster m1 = {"", rand()%31, rand()%31};33 34 scanf("%s", m1.name);35 printf("%sが あらわれた!\n", m1.name);36 37 hit_damage = damage_random(); //ダメージ数決める38 hit(&m1, hit_damage); //残りHP計算,ダメージログ,キルログ表示39 40 printf("finish\n");41 42 return 0;43}44

試したこと・調べたこと

上記の詳細・結果

構造体内のポインタ型をint型と計算するようなソースコードが見つかりませんでした。

補足

実行環境:paiza
(https://paiza.io/projects/unPa-vmG99OMIthyL1EbBw?language=c)

コメントを投稿

0 コメント