こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

別ファイルの構造体の値を読み込む、変えるには?2

以前質問の内容がたらずにもう一度同じ質問をすることをお許しください。

AとBのファイルに同じ構造体のデーターを読み込んだとして、どのように書けば構造体のデーターをファイルAで変えたものをBのファイルからも値が変わっていたり、Bのファイルで変えた値をAのファイルで読み込んだり、することができますか?


static struct{
char *name[2];
double d_data[2];
int i_data[4];
double s_data[2];
int state[2][3];
int regi[5];
}kya_data[2]={ {
  { "奈美" , "爆弾" },
  {
   43.0000 ,
   54.0000 ,
  } , {
   50 , 50 , 50 , 50
  } , {
   0.100,
   0.100,
  } , {
  { 0 , 0 , 0 } ,
  { 0 , 0 , 0 }
  } , {
   100 , 0 , 0 , 0 , 0
  } },{
  { "由美" , "湖" },
  {
   23.0000 ,
   76.0000 ,
  } , {
   50 , 50 , 50 , 50
  } , {
   0.100,
   0.100,
  } , {
  { 0 , 0 , 0 } ,
  { 0 , 0 , 0 }
  } , {
   0 , 0 , 0 , 0 , 100
  } }
};

投稿日時 - 2014-01-02 16:33:28

QNo.8410396

暇なときに回答ください

質問者が選んだベストアンサー

「ファイル」がソースファイルの意味だとして、
・構造体の宣言をヘッダファイルに書く。
・そのヘッダを構造体を読み書きするソースにインクルードする。
・ソースファイルA,Bのどれかに構造体を定義、初期化する。

例えば下のような3つのファイルに分割してコンパイルすればよいでしょう。
(それと char *name[2]; では2つの文字列ではなく、ポインタの配列になってしまいますよ)

/* --- ヘッダファイル (KyaData.h) --- */

struct KyaData { /* KyaData構造体の宣言 */
 char name[2][16];
 double d_data[2];
 int i_data[4];
 double s_data[2];
 int state[2][3];
 int regi[5];
};

/* kya_data配列のextern宣言 */
extern struct KyaData kya_data[2];

/* 関数overwriteのextern宣言 */
extern void overwrite(void);


/* --- ソースファイルA --- */

#include <stdio.h>
#include "KyaData.h" /* ヘッダファイルのインクルード */

struct KyaData kya_data[2] = { /* kya_data配列の定義 */
 {
  { "奈美", "爆弾" },
  { 43.0000, 54.0000 },
  { 50, 50, 50, 50 },
  { 0.100, 0.100 },
  { { 0, 0, 0 } , { 0, 0, 0 } },
  { 100, 0, 0, 0, 0 }
 },
 {
  { "由美", "湖" },
  { 23.0000, 76.0000 },
  { 50, 50, 50, 50 },
  { 0.100, 0.100 },
  { { 0, 0, 0 }, { 0, 0, 0 } },
  { 0, 0, 0, 0, 100 }
 }
};

int main(void)
{
 printf("%s, %f\n", kya_data[0].name[0], kya_data[0].d_data[0]);
 overwrite(); /* kya_data配列の中身を変更 */
 printf("%s, %f\n", kya_data[0].name[0], kya_data[0].d_data[0]);
 return 0;
}


/* --- ソースファイルB --- */

#include "KyaData.h" /* ヘッダファイルのインクルード */

void overwrite(void) /* 関数overwriteの定義 */
{
 kya_data[0].d_data[0] = 11.5;
}

投稿日時 - 2014-01-02 23:20:02

補足

ありがとうございます。
変えることができました。

ただ質問の内容が足らなかったのでそこら辺は別に聞いてみますね

投稿日時 - 2014-01-31 08:57:19

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

- ファイルにデーターを読み込む
- データーをファイルXで変える

の意味がわからんです。
ここでいうところの「ファイル」ってなんですか?

投稿日時 - 2014-01-02 20:09:11

補足

返答遅くなりました

ソースファイルのことですね

投稿日時 - 2014-01-31 08:54:07