这段C程序为有什么问题?

来源:百度知道 编辑:UC知道 时间:2024/06/25 09:36:15
#include <stdio.h>
#define PI 3.1415927
void main(void)
{
double r,h;
printf("请输入圆的半径:");
scanf("%d",&r);
printf("请输入圆柱的高:");
scanf("%d",&h);
printf("%d,%d\n",r,h);
}
为什么运行:
输入 3 回车
输入 1 回车 后所出来的答按一个是3,h却变成了一个很不正常的数了?

double r,h; 在这语句中,你都把r和h定义为双精度浮点型(double)了,
怎么在后面的语句中,却用整型(int)去给其赋值和打印了?
把下面的%d改为%lf就可以了
scanf("%d",&r);
scanf("%d",&h);
printf("%d,%d\n",r,h);
要记住:char 对应 %c ,int 对应 %d, float 对应 %f, double 对应 %lf 。把他们搞混了,就相当于进行了数据类型间的转换了。
要注意:编写程序时应遵循的原则是尽量不要在不同数据类型之间的转换,如果要进行,可以在同种类的数据类型间做长度增大的转换(如:short转化为long,float转化为double),但是不要做长度减小的转换。
很明显:你犯的错误就是做了不同数据类型间的转换,即:把double 转换为了 int 结果溢出了,当然出错啦!!!

将所有的%d改成%lf就行了,输出输入浮点数需要使用%lf,%d只用于整数。