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

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

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

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

Q&A

解決済

2回答

1297閲覧

構造体の理解が足りません

yowappu

総合スコア13

C

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

0グッド

0クリップ

投稿2016/08/26 09:00

###前提・実現したいこと
ゲームのパラメータ入力画面みたいなものを作っているのですが
一定以上のパラメータが入力されたら警告文を出す
というところで躓いています。
自分ではいろいろ試してみたのですが、なかなか解決できません、どなたかお知恵をお貸しください。

###発生している問題・エラーメッセージ
メンバー 識別子が必要です とでます。

###該当のソースコード

C言語

1ここにご自身が実行したソースコードを書いてください

#include <stdio.h>
#include <string.h>

//ステータス構造体
typedef struct{
char name[256];
int HP;
int AP;
int DP;
int EP;
} player;

//プロトタイプ宣言
void InputStatus(player *data);
void ViewStatus(player data);

//メイン関数
int main()
{
player data;
InputStatus(&data);
ViewStatus(data);

return 0;

}

//ステータス入力関数
void InputStatus(player *data)
{
printf("名前を入力して下さい\n");
scanf("%s",data->name);
printf("パラメータ:300を HP、AP、DP、EP(回避)にそれぞれ振り分けて下さい\n");
printf("※EPの上限は40です\n");
scanf("%d",&data->HP);
scanf("%d",&data->AP);
scanf("%d",&data->DP);
scanf("%d",&data->EP);
printf("\n");
//ここのif文に通したいのですがどうすればいいでしょうか
if(data.HP + data.AP + data.DP + data.EP > 300){
printf("パラメータ合計が300を超えています。もう一度入力して下さい\n");
}

//ステータス表示関数
void ViewStatus(player data)
{
printf("名前:%s\n",data.name);
printf(" HP :%d\n",data.HP);
printf(" AP :%d\n",data.AP);
printf(" DP :%d\n",data.DP);
printf(" EP :%d\n",data.EP);
printf("\n");
}

###補足情報(言語/FW/ツール等のバージョンなど)
c言語 コマンドプロンプトを使用しています

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

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

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

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

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

guest

回答2

0

動くように修正しました。
コードは見やすくするために ``` で囲ってください。

#include <stdio.h> //ステータス構造体 typedef struct{ char name[256]; int HP; int AP; int DP; int EP; } player; //プロトタイプ宣言 void InputStatus(player *data); void ViewStatus(player data); //メイン関数 int main() { player data; InputStatus(&data); ViewStatus(data); return 0; } //ステータス入力関数 void InputStatus(player *data) { printf("名前を入力して下さい\n"); scanf("%s", data->name); printf("パラメータ:300を HP、AP、DP、EP(回避)にそれぞれ振り分けて下さい\n"); printf("※EPの上限は40です\n"); scanf("%d",&(data->HP)); scanf("%d",&(data->AP)); scanf("%d",&(data->DP)); scanf("%d",&(data->EP)); printf("\n"); //ここのif文に通したいのですがどうすればいいでしょうか if (data->HP + data->AP + data->DP + data->EP > 300) { printf("パラメータ合計が300を超えています。もう一度入力して下さい\n"); } } //ステータス表示関数 void ViewStatus(player data) { printf("名前:%s\n",data.name); printf(" HP :%d\n",data.HP); printf(" AP :%d\n",data.AP); printf(" DP :%d\n",data.DP); printf(" EP :%d\n",data.EP); printf("\n"); }

投稿2016/08/26 09:10

moonphase

総合スコア6621

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

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

yowappu

2016/08/26 09:16

ご丁寧にありがとうございます 見比べてたんですが、自分のコードif文の}がありませんでしたね ありがとうございます!
guest

0

ベストアンサー

InputStatus関数は構造体のアドレスを受け取っているので、if文の所はscanfのところのようにこうします。

c

1if(data->HP + data->AP + data->DP + data->EP > 300){ 2

投稿2016/08/26 09:09

ttyp03

総合スコア16998

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

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

yowappu

2016/08/26 09:15

scanfのところと同じようにするんですね。。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問