コモトちゃんの宿題を手伝う

バイトから帰ったらですね、、、とてもビックリするような出来事があったんです。いつものように、音楽を流しながらメールチェックをしていると、玄関をドンドン強く叩く音がするんです。しかも、おいらが遅番から帰ってきた直後の夜11時にですよ。もう、ちょービックリして、どこのワルイヤツがウチに乗り込もうとしているのか、心臓バクバクでしたよ。


で、反射的に玄関へと出向いたワケなんですが、正体は警察学校に通っている友達、福井ちゃんでした。今から富士五湖のほうへと釣りへ出かけるようです。まだ夜になったばかりだというのに、ご苦労なことです。それにしても、ガチンコでおいらを驚かすのはやめていただきたい…。寿命が一日くらい縮んだかもしれません←それだけかよ/(--)/


「じゃ〜な〜」といって、福井ちゃんはおいらを驚かすとそそくさと去ってしまったんで、この迷惑な出来事をコモトちゃんにMSNで伝えます。コモトちゃんは驚いてはくれたんですが、「DCT変換をC言語で」というレポートに戸惑っているようで、逆に質問されてしまいました。


・・・・・それから1時間、こんな真夜中にも関わらず、暇つぶしを兼ねてコモトちゃんのレポートに付き合ったというわけです。どうも、自分で書いたプログラムコードが上手くいかない模様だったので、まずはそのソースを送ってもらいました。色々と調べた後、ファイルからの値読み込みが上手くいっていないのを発見。すぐさま修正して教えてあげました。


間違った部分はこんな感じ


double dbl;
fscanf(fp,"%d",&dbl);
printf("%d",dbl);


ファイルの内容はきちんと表示されるのに、なぜかdbl変数の内容が正常じゃない。もう皆さんはお気づきでしょうか?そうです。dbl変数には、32ビット整数型で中途半端に値が読み込まれているのです。無理やり、"%d"でprintfしたので値は正常に表示されているってところがミソですな。


この間違いコードを、すぐさま下のように修正して送り返してやりました。


double dbl;
int temp;
fscanf(fp,"%d",&temp);
dbl=(double)temp;
printf("%f",dbl);


scanfってのは、double型の読み込みができなかったんでしたっけ??ちょっとど忘れ(汗)。今回のコードでは、整数の読み込みだったので、tempというint型変数を介してdblに読み込むという手法を使ってみました。


なんか、C言語初心者がよく間違えそうなコードですな。初心者でなくても、膨大なコードの中にこの間違いが埋もれていたら、探すのにちょっと時間がかかってしまうかも!?おいらは電話片手に無駄話をしながらキーボードをポチポチしていたので、かなり長電話になってしまいました。


コモトちゃんよ、プログラミングより、夏だよ。夏の夜といえば…?