2012-03-25 5 views
6

私は何が間違っているのか分かりませんが、私はコンソールからダブルを読むことができません。それを読むことは何らかの理由でうまくいく。私はXcodeを使用しています。スキャンが機能しません。コンソールからダブルを読む必要があります

double n1; 

// get input from the user 
printf("Enter first number: "); 
scanf("%f", &n1); 

printf("%f", n1); 

これは、入力内容に関係なく常に0を出力します。

答えて

6

%fは、ダブルではなくフロートを探しています。ダブルを使用する場合は、%lfの形式を使用します。

ちょっと面白いですが、clangは特別なフラグを付けずにこれについて警告していますが、gcc 4.6は-Wall -Wextra -pedanticでも警告しません。

+0

は幸いGCC 5.2.1-22ubuntu2引数なしで文句 –

4

%fは、single precision floating-point value(float)を意味します。必要な書式指定子は%lfで、long precision floating-point value(double)を意味します。

2

データがメモリにどのように格納されるかについてのすべて。
まず、メモリにどのくらいの時間と浮動小数点が格納されているかを教えてください。

  • 二重(長いフロート、64ビット)のようなメモリ又はthis(リトルエンディアン表記)に格納されています。
  • フロート(32ビット)はthis(リトルエンディアン表記)のように格納されます。あなたは%fとして4である(すなわちフロートを、入力を取るために求めている
    また、この「en.wikipedia.org/wiki/Floating_point#Internal_representation」を見てみましょう(すべての浮動データ型)だからここ

実際には8バイト)の変数(ここではn1)に格納されます。

+0

リトルエンディアンとビッグエンディアンhttp://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html – Chokho

関連する問題