同学们!为什么我int变量赋值给float,打印出来是这样?
输入 1结果是 x=0.00,y=1.00
我知道输入类型
scanf("%d",&x);
应该改成scanf("%f",&x);
就不会有问题了
但我想知道现在这个结果是 x=0.00,y=1.00怎么来的?
y=x*x+1 运行难道不是 1*1+1等于整型的2吗?
然后赋值给浮点型变量y,y等于2.0,再输出保留两位小数,y等于2.00,为什么不是这样?
代码如下
#include <stdio.h>
int main(){
float x,y;
scanf("%d",&x);
if(-5<x && x<0){
printf("x=%.2f,y=%.2f",x,y=-x+4);
}
//===================================================
else if(0<x && x<5){
printf("x=%.2f,y=%.2f",x,y=x*x+1);//这行!这行!
}
//===================================================
else if(x == 0){
printf("x=%.2f,y=0.00",x);
}
else{
printf("No meaning");
}
return 0;
} 本帖最后由 tommyyu 于 2022-10-16 20:56 编辑
不能用%d输入,否则x就是0,y = 0*0+1 = 1 scanf("%f" , & x) ; // scanf() 的格式描述符与变量之间必须对号入座,浮点型变量应该用 "%f" 而不是 "%d" "不要用%d,不要用%d,不要用%d",重要的事情说三遍
解释一下:你用%d输入x,错误,但是C语言不会报异常,所以x会得到一个值,因为float类型本身就会丢失精度,所以这个值近似与0,所以执行else if(0<x && x<5)这个条件,然后x=0.0,y=1.00
(个人理解) {:5_109:}
#include <stdio.h>
int main(){
float x,y;
scanf("%d",&x);
if(-5<*(int*)&x && *(int*)&x<0){
printf("x=%.2f,y=%.2f",(float)(*(int*)&x),y=-(float)(*(int*)&x)+4);
}
//===================================================
else if(0<x && x<5){
printf("x=%.2f,y=%.2f",(float)(*(int*)&x),y=(float)(*(int*)&x)*(float)(*(int*)&x)+1);//这行!这行!
}
//===================================================
else if(x == 0){
printf("x=%.2f,y=0.00",(float)(*(int*)&x));
}
else{
printf("No meaning");
}
return 0;
}
jhq999 发表于 2022-10-17 15:04
兄弟辛苦了,帮我加了那么多强制转换{:5_106:} FengYue20 发表于 2022-10-16 22:27
"不要用%d,不要用%d,不要用%d",重要的事情说三遍
解释一下:你用%d输入x,错误,但是C语言不会报异常, ...
这个丢失精度能详细讲讲吗?为什么这个值会近似于0?丢那么多的吗? 转换符要和你声明的变量类型一致 未被驯化的甲鱼 发表于 2022-10-17 16:00
兄弟辛苦了,帮我加了那么多强制转换
{:5_109:} #include <stdio.h>
int main(){
float x,y; //这为float类型的对应是%f ,用%d当然会有问题了
scanf("%d",&x);//用%d来输出准确来说是有值的但是由于格式符不对输入的是乱码,应该会被判断有值
//所以会执行第二if语句
if(-5<x && x<0){
printf("x=%.2f,y=%.2f",x,y=-x+4);
}
//===================================================
else if(0<x && x<5){
printf("x=%.2f,y=%.2f",x,y=x*x+1);//这行!这行!
}
//===================================================
else if(x == 0){
printf("x=%.2f,y=0.00",x);
}
else{
printf("No meaning");
}
return 0;
}
页:
[1]