![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C语言,double类型的变量使用scanf()函数赋值后再使用printf()输出,为什么和输入的值不同?
void main( )
{ double x;
scanf("%f", &x);
printf("%f\n", x);
}
输入1
输出的结果:
-92559604281615349000000000000000000000000000000000000000000000.000000 展开
2015-09-15 · 知道合伙人软件行家
![](https://wyw-base.cdn.bcebos.com/pc-content/follow.gif)
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"); )
精度不够 截断了吧
改成这样
#include <stdio.h>
void main( )
{ double x;
scanf("%lf", &x);
printf("%lf\n", x);
}
%f是输入float型时用的
void main()
{
double x;
scanf("%lf", &x);
printf("%lf\n", x);
}
双精度double要用%lf,不信,你试一试。祝你愉快!
#include <stdio.h>
void main( )
{ double x;
scanf("%ld", &x);
printf("%ld\n", x);
}