藤原と申します。 具体的なところには詳しくないので、一般論になりますが。 This message is reply to mozilla_315 - san (Subject was : [H8-ML(5833)] sprintfの結果が表示されない) Message-ID: <43F5A2B0.4000300@xxxxxxxxx> in Fri, 17 Feb 2006 19:17:20 +0900 ... > > char ans_str[30] = ""; > char siki[20] = "+62.9"; > double answer = 321.45; > > answer = answer + atof(siki); > sprintf(ans_str, "%+f", answer); 調べる手順は、たとえば以下の手順になると思います。 1.sprintf() 直後の、ans_str の内容をデバッガでチェックする。 → 妥当なら、sprintf() 以降、この内容がおかしいのなら、sprintf() 以前に問題あり。 問題が sprintf() 以前の場合は、以降のチェック 2.answer + anser + atof(siki); の行をコメントアウトしてチェック → これでOKなら、atof() の使い方に問題。 NGなら、sprintf()の問題 ※ atof() は、double を返す関数なので、プロトタイプ宣言(必要な ヘッダファイルの include)が必須です。 これがないと、コンパイラは、atof() が返してきた double を int とみなして、さらに、キャストしようとしますまたは、double と int では、返値の渡し方が違うので、int の手順に従ってでたらめ な返値をとってきます。 3.sprintf() も同じく、適切なヘッダファイルが include されていないと、 問題を起こす可能性が高くなります。 printf() 系を含む可変個数引数を受け入れる関数は、引数の受け入れ 機構が特殊な場合があり、この場合は、ヘッダファイルの宣言で、可変 個数引数を扱う関数だと知らせないと、間違った引数の引き渡しをします。 4.sprintf() に問題が絞られた時点で、たとえば、 sprintf(ans_str, "ANS"); sprintf(ans_str, "ANS=%+f", 1.0); のような、単純な引数を渡してチェックしてみます。 これでNGであれば、既に回答があるように、sprintf() 周辺の設定の 問題となります。 最後に、「うまくいかないみたいです」という質問の方法は、やはり、あまり 良くないと思います。 ・全く表示されません。 ・表示がでたらめです → いつも同じように「でたらめ」です or 毎回表示内容が違います ・引数が「〜」の時にはうまくいきます。 ・sprintf() 直後の asn_str は正常です or この時点でNGです。 などの情報を含んでいれば、解決の糸口は、よりつかみやすいと思います。 最後にちょっと宣伝をば。 ------------------------------------------------------------------- 浮動小数点(double)と、文字列の相互変換のライブラリを書いてみました。 double -> n 桁+.+ m 桁 の文字列 文字列 -> double の変換を行います。(現在のバージョンでは、最終桁に±1の誤差が出る ケースがあります) http://www.asahi-net.or.jp/~ig5k-fjhr/tec/strnum.h http://www.asahi-net.or.jp/~ig5k-fjhr/tec/strnum.c http://www.asahi-net.or.jp/~ig5k-fjhr/tec/libfloat.h http://www.asahi-net.or.jp/~ig5k-fjhr/tec/libfloat.c 浮動小数点のライブラリは、libfloat の方ですが、strnum (こちらは、整数と文字列の関連ライブラリ)に依存しているので、 両方必要です。 -------------------------------------------------------------------- -- 今日は雨水 (04:26)です。 _/ -- Last -224 hours until Torino 2006 Olympic Games ------------- _/ FUJIWARA Keiichi _/ E-Mail : keiichi@xxxxxxxxxxxxx <or> k1@xxxxxxxxx _/ URL : http://www.keiichi.fujiwara.name/ ------------------------------------------+----- Luna Phase 19.96 -- PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6