编写3函数,转换
#include <stdio.h>
void main()
{
void max1();
void max2();
void max3();
char zi;
do
{
fflush(stdin);
printf( "英尺转英寸(输入c),英寸转厘米(输入l),厘米转米(输入m).\n ");
scanf( "%c ",&zi);
if(zi== 'c '||zi== 'C ')
max1();
else if(zi== 'l '||zi== 'L ')
max2();
else if(zi== 'm '||zi== 'M ')
max3();
else
printf( "请重新输入\n ");
}while((zi!= 'c '||zi!= 'C ')||(zi!= 'l '||zi!= 'L ')||(zi!= 'm '||zi!= 'M '));
}
void max1()
{
float a,b;
printf( "英尺: ");
scanf( "%f ",&a);
b=a*12;
printf( "%.2f英尺=%.2f英寸\n ",a,b);
}
void max2()
{
float a,b;
printf( "英寸: ");
scanf( "%f ",&a);
b=a*2.54;
printf( "%.4f英寸=%.4f厘米\n ",a,b);
}
void max3()
{
float a,b;
printf( "厘米: ");
scanf( "%f ",&a);
b=a/100;
printf( "%.3f厘米=%.3f米\n ",a,b);
}
有一个警告1 warning。
warning C4244: '= ' : conversion from 'double ' to 'float ', possible loss of data
这个的意思是把double变float吗?为什么要变呢。
在之前的一道题中也是这样的警告。我就改了
例如float的时候得67.999999
改为double的是就变为68.000000。了
这个是为什么呢?
谢谢您了
[解决办法]
因为C/C++中,浮点数默认是double型的,当将一个double型的浮点数赋给一个float型的浮点数,可能会损失精度,比如有的编译器double型用8个字节表示,而float型却只有4个字节。
float a;
a = 5.3; // 编译器会把这里的5.3当成double型,所以给a赋值的时候就会有一个警告
a = 5.3f; // 如果在浮点数后面加上f,表示该浮点数是单精度的,所以这里赋值就不会有警告。