为什么这个变量声明只能用float,而用double就出错
代码如下
将float改为double
PS:我用的是VS2010,不过我想这个问题应该和编译系统没关系吧! c scanf
[解决办法]
scanf %lf double
完毕
[解决办法]
scanf double 用%lf
printf是因为类型提升,float也被转成double了,scanf接收的是指针,要对应类型
[解决办法]
%f 对应 float
%lf 对应 double
[解决办法]
好顶赞
[解决办法]
scanf() ; //格式化输入,匹配输入格式
printf(); //格式化输出,匹配输出格式
//上面两个输入输出函数都要匹配格式,不然结果不可预知
[解决办法]
float变量宽度是4字节。
double宽度是8字节。
如下代码
double x1,x2;
scanf("%f",&x1);
"%f"使scanf认为x1只有4个字节,执行后会把你输入的值转成4字节的float放入x1的低4字节,x1的高4字节为随机值。
[解决办法]
你声明的是double变量,应该使用这样的格式:scanf("%lf,%lf",&x1,&x2);
需要匹配才行啊,float和double所占的内存大小都不一样,当然会出错了。
[解决办法]
+1
我是之前用snprintf写浮点型到字符串转换时是发现了这个问题
------解决方案--------------------
scanf() 不匹配,格式类型较短,实参数据类型较长,填充一部分,另一部分,不管相当于野指针的写操作.
printf 不匹配,可能会错位,也可能没有问题,也可能乱输出,具体看数据在参数传递时的长度.
和该类型传递时候,采取的措施。
[解决办法]
printf
char -->%c,%d,%hd,%x ,%hx,%u,%hu
short -->%c,%d,%hd,%x ,%hx,%u,%hu
int -->%c,%d,%hd,%x ,%hx,%u,%hu
这些匹不匹配,问题都不很大,其中.
因为都是整型数据,都不比int 更长,压栈,也是按照int 长度压栈。
scanf 就要严格一点,不然就会改写其他数据。