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

时间:2012-03-25 13:46:01

标签: c io scanf

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

double n1;

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

printf("%f", n1);

无论我输入什么内容,它都会一直打印出来。

3 个答案:

答案 0 :(得分:7)

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

除了有点有趣之外,clang在没有任何额外标志的情况下警告这一点,即使使用-Wall -Wextra -pedantic,gcc 4.6也不会发出警告。

答案 1 :(得分:5)

%f适用于single precision floating-point value(浮动)。您需要的格式说明符是%lf,表示long precision floating-point value(双精度)。

答案 2 :(得分:2)

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

  • 双精度(long float,64位)存储在内存中,如this(小端符号)。
  • 其中float(32位)的存储方式与this(小端符号)相同。
    另请查看“en.wikipedia.org/wiki/Floating_point#Internal_representation”(所有浮动数据类型)

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