- ベストアンサー
サンプルコードのコメントの意味が理解できません。
『独習C 第3版』に下記問題とその解答コードがありますが、 解答コードの変数「d」を初期化している意味がコメントを読んでも分かりません。 初期化しないとどんな問題があるのでしょうか? 教えて下さい。 【問題】 文字列とdouble値と整数値を入力させ、これらの数値を読み込んだ後、 入力された文字数を表示するプログラムを作成してください。 【解答】 --------------------------------------------------------- /* apdC-115.c */ #include <stdio.h> int main(void) { char str[80]; /* 浮動小数点ルーチンが必ず使えるよう、何か浮動小数点数値 を使って、dを初期化しておく */ double d = 3.1415926; int i, num; printf("文字列、double型、整数を入力してください: "); scanf("%s%lf%d%n", str, &d, &i, &num); printf("読み込まれた文字数: %d", num); return 0; } --------------------------------------------------------- なお、自分の環境は、OSがVistaで、コンパイラがVC++2008です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
具体的には昔のVisual C++ではscanf("%lf"の部分で runtime error R6002 - floating point not loaded になります http://msdn.microsoft.com/ja-jp/library/k1x26e0x(VS.80).aspx の2に当てはまります VC++2008では関係ないのでそのコメントは無視してかまいません
その他の回答 (2)
- walktkd
- ベストアンサー率22% (103/461)
dの入力を促しても入力されなかった場合を考慮して、取りあえず正常に動かす為のデフォルト値を設定します。 あまり使ってないのでscanfの仕様を忘れてしまいましたが、整数は入力されなくても、結果を返すnumには0が返り、小数は入力されないと0を返さずエラーとなると思います。エラーというかscanf内部で無限ループして入力エンターして止まってしまうかもしれません。 多分scanf関数の仕様が小数点があるという前提なので、numに返す値も小数点含めた桁数引く1としてると、未入力時、桁数がマイナスになってしまいます。
補足
早速のご回答ありがとうございます。 未入力というのは、入力時にEnterキーだけ押すことをいうのでしょうか? 自分の環境では、再度入力を求められるため、未入力状態になりませんでした。
- SilverThaw
- ベストアンサー率32% (260/806)
浮動小数点を使用する場合には、浮動小数点専用のライブラリを組み込み使用する場合(環境、コンパイラ)がある。 明示的に浮動小数点が使用されていることがわからない場合、最適化オプションによっては専用ライブラリが組み込まれない可能性がある。 という感じかな?
お礼
早速のご回答ありがとうございます。 そういう可能性があるんですね。 今まで浮動小数点の変数を整数値で初期化するコードを 書くことが多かったので、これからは気をつけたいと思います。
お礼
的確なご回答ありがとうございます。 おかげで疑問がすっきりしました。