構造体配列を引数とした入力関数を作成していますが、値がうまく構造体のメンバに保
存されません。
typedef struct wave_info
{
double amplitude;
double freaquency;
double initial_phase;
double value;
}WAVE_INFOMATION;
int main(void)
{
WAVE_INFOMATION Wave[100];
Input(Wave,100);
return 0;
}
void Input(WAVE_INFOMATION *Wave,int imax)
{
FILE *InputFile=NULL;
char strings1[300],strings2[300];
double freaqency_L,freaqency_R;
int i;
InputFile = FileOpen(InputFile,hoge.txt,'r');
for(i=0; i<imax; i++)
fscanf(InputFile,%lf,&(LeftAM_Wave+i)->amplitude);
}
デバッガで見てみると、fscanfはうまく動作しており、正しい値が代入されていまし
た。どうやらメイン関数に戻る際に、読み込んだ値が保持されていないようです。
何が良くないのでしょうか?
初歩的な質問ではあると思いますが、ご教授いただけると幸いです。
>void Input(WAVE_INFOMATION *Wave,int imax)
>fscanf(InputFile,%lf,&(LeftAM_Wave+i)->amplitude);
LeftAM_Waveってナニモノですか?
>LeftAM_Waveってナニモノですか?
本当。
なに?って感じですよ。
LeftAM_Wave を Wave にすれば動く気がする…。
fscanf( InputFile, %lf, &Wave[i].amplitude );
で良さそう。
こちらでVC6.0でテストしました。
fscanf( InputFile, %lf, &Wave[i].amplitude );のは正しいと思います。
>LeftAM_Waveってナニモノですか?
ひょっとして、
WAVE_INFOMATION Wave[100];
この「100」をもっと多くしてnew等でメモリー割り当てしたかったとか?
coxさんの説明がないとわかりませんね。
保存する構造体にdoubleを使うのはどうかと思いますが?
double = 浮動小数点ですから、保存するたびに小数点以降の値が変わる
可能性があります。
int等の整数に変換したほうがいいですね。
> 保存する構造体にdoubleを使うのはどうかと思いますが?
> double = 浮動小数点ですから、保存するたびに小数点以降の値が変わる
> 可能性があります。
意味不明。
小数点以降の値が変わるとどういう不具合になるのでしょうか?
> 意味不明。
> 小数点以降の値が変わるとどういう不具合になるのでしょうか?
判定等で問題になることがあります。
エンドユーザーも気にする人がいます。
質問者が問題ないなら、それでいいですが。。。。。。
おっしゃりたいことは、十進数で表示された値とdoubleの内部表現値が正確に
一致しないことでしょうか?
でしたら、「保存するたびに」という表現は間違いでしょう。
/* まあ私の指摘内容も的を射ていませんが。 */
まぁ多分やりたいのはこういう事ではないでしょうか。
WAVE_INFOMATION * tmp = Wave;
for(i=0; i<imax; i++){
fscanf( InputFile,%lf,&tmp->amplitude);
tmp++;
}
スレ主さんやりたいのは多分こういう事ではないでしょうか。
WAVE_INFOMATION * tmp = Wave;
for(i=0; i<imax; i++){
fscanf( InputFile,%lf,&tmp->amplitude);
:
:
tmp++; // 次のポインタへ移動
}
(コード未検証につき、「意味」だけ汲み取ってね)
ちがったらすまん。
> おっしゃりたいことは、十進数で表示された値とdoubleの内部表現値が正確に
> 一致しないことでしょうか?
その通りです。
> でしたら、「保存するたびに」という表現は間違いでしょう。
そうですね。
ただ、毎回、doubleの値を作るたびに変わるので気になっただけです。
このぶんだと小数点何位まで有効にするのかも決めてないですよね。