scanf无法正常工作。 需要从控制台读取双倍

我不确定我做错了什么,但我无法从控制台读取双重内容。 读它因某种原因工作正常。 我正在使用Xcode。

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

无论我输入什么,这将始终打印0。

%f正在寻找浮动,而不是双重。 如果要使用double,请使用格式%lf

作为一个有点有趣的一面,clang警告没有任何额外的标志,gcc 4.6即使用-Wall -Wextra -pedantic也不会警告它。

%f表示single precision floating-point value (浮点数)。 您需要的格式说明符是%lf ,表示long precision floating-point value (double)。

它完全是关于数据如何存储在内存中的。
我先告诉我们将多长时间和浮点数存储在内存中。

  • 双(长浮点数,64位)存储在内存中或类似(小端符号)。
  • 像这样存储浮点数(32位)(小端符号)。
    另请看这个“en.wikipedia.org/wiki/Floating_point#Internal_representation”(所有浮动数据类型)

所以在这里你要求输入为%f (即浮点数,即4个字节,但是两个是8个字节),因此编译器从控制台获取输入并将其转换为浮点类型并将其存储在内存位置(实际上是8个字节)变量(这里是n1 )。