这个C语言结果为什么不对??

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:40:43
这是书上的一个例子程序如下:
main()
{
float a,b;
int c;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("max is %d\n",c);
}
max(float x,float y)
{
float z;
z=x>y?x:y;
return(z);
}
按书上说的输入1.5,2.5,结果为max is 2
因为它会自动转换,可是我做了一次结果为1,不知道是为什么??

问题出在这里
printf("max is %d\n",c);
这个输出函数的格式是%d的 就是整数而你返回z的值是f
单精度的类型 所以返回的就是整数1了 至于有的返回2 那是版本的问题了 你可以把printf("max is %d\n",c);
改成printf("max is %f\n",c);就可以了

编译器不同,结果是有问题...

你的编译器输出1是正确的.
原因:
1.这个程序能运行,但是它是错的,函数定义在main()函数后必须使用原形声明.你加上int max(float x,float y);
一定得到的是2
2.如果不加原形声明,你把子函数放到顶上,main()函数的前面也得到2
3.如果不修改的本程序将得到1的结果
原因:执行到c=max(a,b); 编译器不知道它是什么,所以传递时出现了差错.

printf("max is %d\n",c);
输出类型错了,把"%d"改成"%f"就可以了

因为你在输入1.5和2.5时少了一个逗号
我把max(float x,float y)提前了,不然不行

//主函数前应有函数声明:
//前加: float max(float,float);
main()
{
float a,b;
int c; //应修改为 float c;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("max is %d\n",c); //%d,应修改为%f(或改为%
//1.1f
}
max(float x,float y) //max 前加 float
{ <