C语言,double类型的变量使用scanf()函数赋值后再使用printf()输出,为什么和输入的值不同?

#include <stdio.h>
void main( )
{ double x;
scanf("%f", &x);
printf("%f\n", x);
}

输入1
输出的结果:
-92559604281615349000000000000000000000000000000000000000000000.000000

    c语言中double输入输出,都用 %lf 进行格式化,是否写成了 %f, 这个是float类型。

#include <stdio.h>

int main()
{
    double d = 0;
    printf("intput a double:");
    scanf("%lf", &d);
    printf("d = %lf\n", d);
    return 0;
}

2. 字符定义如下

字符 对应数据类型 含义

d / i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法

o unsigned int 无符号8进制整数(不输出前缀0)

u unsigned int 无符号10进制整数

x / X unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)

f(lf) float(double) 单精度浮点数用f,双精度浮点数用lf(尤其scanf不能混用)

e / E double 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

g / G double 使用以上两种中最短的形式,大小写的使用同%e和%E

c char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

s / S char * / wchar_t * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

p void * 以16进制形式输出指针

n int * 到此字符之前为止,一共输出的字符个数,不输出文本

% 无输入 不进行转换,输出字符‘%’(百分号)本身

m 无 打印errno值对应的出错内容,(例: printf("%m\n"); )

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-17

精度不够  截断了吧


改成这样


#include <stdio.h>
void main( )
{  double x;
   scanf("%lf", &x);
   printf("%lf\n", x);
 }

%f是输入float型时用的

本回答被提问者采纳
第2个回答  2013-06-25
float是4个字节,而double是8个字节,如果你要写入double你就必须写入8个字节,4个字节的写入使得另外4个字节就是随机数字,可以用long float来替代double因为他也是8个字节。
第3个回答  2013-06-25
#include<stdio.h>
void main()
{
double x;
scanf("%lf", &x);
printf("%lf\n", x);
}
双精度double要用%lf,不信,你试一试。祝你愉快!
第4个回答  2013-06-25
因为double不能用%f来控制输入和输出,应该用%ld来控制输入和输出。

#include <stdio.h>
void main( )
{ double x;
scanf("%ld", &x);
printf("%ld\n", x);
}
相似回答