

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の使い方がわかっていません。
No.3ベストアンサー
- 回答日時:
プログラムを見る限りおかしそうなところは無いので、小数点以下が4桁で出るはずです。
どこかにタイプミスか勘違いがあるのでしょう。落ち着いて見直してみてください。あるいは、本当にここに書いたプログラムのままですか?省略して載せてません?
>これはatofの逆の変換ftoaを作れという課題なのですがこれをこのまま出すととまずいでしょうか。
そもそも自分で意味を理解していないものを出してはまずいでしょう。理解したとして、sprintfを使うのが課題の意図に合っているかどうかは、課題の前提となる講義があるはずで、講義の流れに沿ってないとすると駄目でしょうし、合っていればOKでしょう。
>sprintfの引数の"%*f"とはどういう意味なのでしょうか
sprintf(s,"%10.5f",v) と sprintf(s,"%*.*f",10,5,v)が同じ結果になるといえば分かりますか?
ご指摘のとおり、学校のほうでは"%.*f"を"%*f"と打ってしまっていました。
>sprintf(s,"%10.5f",v) と sprintf(s,"%*.*f",10,5,v)が同じ結果になるといえば分かりますか?
確かにこう書いていただけるとわかりやすいですね。ありがとうございました。
No.2
- 回答日時:
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を作れという課題なのですがこれをこのまま出すととまずいでしょうか。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
間接参照のレベルが異なっています
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
-'0'の意味について
-
charからLPTSTRへの変換方法
-
C言語の入力した文字を反転させ...
-
c言語でユーザ関数を利用して入...
-
Linuxでフォルダ内全ファイル名...
-
間接操作のレベルとは
-
型変換
-
構造体の各メンバにfor文からア...
-
c言語配列の結合についてです。...
-
TCHAR文字列?の特定部分の数字...
-
DxLibについて質問です
-
'const char *' 型は 'char *' ...
-
c言語でソーベルフィルタが作り...
-
CStringをwchar_tに変換したい
-
ADOレコードセット操作(Forルー...
-
エラーの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
charでの計算?
-
配列をnビットシフトする
-
c++ 文字列を入力して、一文字...
-
'const char *' 型は 'char *' ...
-
c言語でユーザ関数を利用して入...
-
干支のプログラム
-
switch文で文字を比較すること...
-
char型からのバイト数取得
-
ネットワークにつながっている...
-
getchar()を int でとる理由...
-
間接操作のレベルとは
-
str系関数を使わずに二つの文字...
おすすめ情報