コモトちゃんの宿題を手伝う
abdev 7月 8th, 2005バイトから帰ったらですね、、、とてもビックリするような出来事があったんです。いつものように、音楽を流しながらメールチェックをしていると、玄関をドンドン強く叩く音がするんです。しかも、おいらが遅番から帰ってきた直後の夜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言語初心者がよく間違えそうなコードですな。初心者でなくても、膨大なコードの中にこの間違いが埋もれていたら、探すのにちょっと時間がかかってしまうかも!?おいらは電話片手に無駄話をしながらキーボードをポチポチしていたので、かなり長電話になってしまいました。
コモトちゃんよ、プログラミングより、夏だよ。夏の夜といえば…?
7月 9th, 2005 at 23時11分11秒
浮動小数点型の書式指定子は %f です。printf関数の場合はこれだけで float型も double型もOKみたいですが、scanf関数だと両者を区別して、float と %f、double と %lfがそれぞれ対応します。通常は %d だけで事足りることも多いので、僕もしばしば忘れてしまいますだから、覚え書きのかわりということで(^^;;;
7月 9th, 2005 at 23時41分22秒
そーでした!double型は、”%lf”で表示できましたね。メモメモ