ちょっと先の未来クイズ第4問

atofの逆の変換ftoaの作り方を教えてください。あるいは参考になるページを教えてください。
#include <stdio.h>

void ftoa(char *string, double f, int figure)
{
sprintf(string, "%.*f", figure, f);
}

main()
{
char str[10];

ftoa(str, 0.3532, 4);
puts(str);
}

関数ftoaの部分はネット上で見つけたもので、このように書けば4行ですむらしいのですがどうも実行結果は
 0.123400
というふうに4桁に指定しているのに6桁ででてきてしまいます(私の使っているコンピュータでは)。main関数は私が描いたのですが、まずいところがあったら教えてください。ちなみに私はsprintfの使い方がわかっていません。

A 回答 (3件)

プログラムを見る限りおかしそうなところは無いので、小数点以下が4桁で出るはずです。

どこかにタイプミスか勘違いがあるのでしょう。落ち着いて見直してみてください。
あるいは、本当にここに書いたプログラムのままですか?省略して載せてません?

>これはatofの逆の変換ftoaを作れという課題なのですがこれをこのまま出すととまずいでしょうか。
そもそも自分で意味を理解していないものを出してはまずいでしょう。理解したとして、sprintfを使うのが課題の意図に合っているかどうかは、課題の前提となる講義があるはずで、講義の流れに沿ってないとすると駄目でしょうし、合っていればOKでしょう。

>sprintfの引数の"%*f"とはどういう意味なのでしょうか
sprintf(s,"%10.5f",v) と sprintf(s,"%*.*f",10,5,v)が同じ結果になるといえば分かりますか?
    • good
    • 0
この回答へのお礼

ご指摘のとおり、学校のほうでは"%.*f"を"%*f"と打ってしまっていました。
>sprintf(s,"%10.5f",v) と sprintf(s,"%*.*f",10,5,v)が同じ結果になるといえば分かりますか?
確かにこう書いていただけるとわかりやすいですね。ありがとうございました。

お礼日時:2002/09/13 12:54

sprintfはprintfでモニタに表示されるはずの文字列を


そっくりコピーできるものです。
sprintfを使うならftoaの関数を作ることはあまり
意味がありません。(itoa等も同じ)

int書き込みバイト数 = sprintf(char *格納先,const char 出力書式文字列,...);



d=0.00001;
rtn=sprintf(str,"%f",d);

これでstrに"0.00001"が格納されていると思います。
4桁にしたいなら
d=0.0001;
rtn=sprintf(str,"%1.4f",d);

としてもいいし
strの文字列を探索して
"."から数えて+5つめの位置にNULL文字をいれてもいいかと思います。

この回答への補足

上記の「私の使っているコンピュータ」は学校のコンピュータなのでそれで動くか今確認することはできませんが、家のコンピュータでは
#include <stdio.h>

void ftoa(char *string, double f)
{
sprintf(string, "%1.8f", f);
}

main()
{
char str[10];

ftoa(str, 0.3532);
puts(str);
}
としたところ
 0.35320000
となりました。自分で書いててわかってないのですがsprintfの引数の"%*f"とはどういう意味なのでしょうか。また、これはatofの逆の変換ftoaを作れという課題なのですがこれをこのまま出すととまずいでしょうか。

補足日時:2002/09/12 20:46
    • good
    • 0

ftoaを作られた方がいますので参考にしてみて下さい。



参考URL:http://www1.linkclub.or.jp/~zhidao/zlab/computin …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報