http://oshiete.goo.ne.jp/qa/8410396.html
少し延長気味になります。
ソース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
} }
};
void data_load( void ){ //テキストファイルからロード
//略
}
void data_read( int num , const char **r_name , ... ){ //読み込み
va_list args;
va_start( args , r_name );
int a = 0;
if( r_name == "name" ){ a = 0; }
else if( r_name == "d_data" ){ a = 1; }
else if( r_name == "i_data" ){ a = 2; }
else if( r_name == "s_data" ){ a = 3; }
else if( r_name == "state" ){ a = 4; }
else if( r_name == "resi" ){ a = 5; }
switch( a ){
case 0:
**s = kya_data[ num ].name;
break;
case 1:
*d = kya_data[ num ].d_data[ *num2 ];
break;
case 2:
*i = kya_data[ num ].i_data[ *num2 ];
break;
case 3:
*d = kya_data[ num ].s_data[ *num2 ];
break;
case 4:
*i = kya_data[ num ].state[ *num2 ][ *num3 ];
break;
case 5:
*i = kya_data[ num ].resi[ *num2 ];
break;
}
}
void data_save( int num , const char **r_name , ... ){ //構造体の値の変更と同時にテキストファイルに書き込み
//略
}
void data_load( void );
void data_read( int num , const char **r_name , ... );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
char *s;
double i;
data_load();//本当は必要な画面の時だけ呼び出す
data_read( 0 , "name" , 0 , &s ); //ソースファイルAに書かれた0番目の人の0番目のnameデーターをソースファイルBのsに格納したい
data_read( 0 , "state" , 0 , 1 , &i ); //ソースファイルAに書かれた0番目の人の0列目の1番目のstateデーターをソースファイルBのiに格納したい
DrawString( 0 , 0 , GetColor( 0 , 0 , 0 ) , s );
DrawString( 0 , 20 , GetColor( 0 , 0 , 0 ) , i );
}
どのように書いたら別ファイルで書かれた構造体のデーターを読み取れますか?
聞いた先ではd_dataを特定の値に変えることはできても
d_data以外の値を変えるには変更したい物専用の関数を作らないといけないため不便だと思うのです。
そのため値の読み取りようと、値の変更用の関数を作れないかと思い聞いてみました。