用指针求三个浮点数的最值,数据溢出?

代码如下:

#include <stdio.h>
int main()
{
    void fun(float *x,float *y,float *z);
    float a,b,c;
    printf("请输入三个浮点数:");
    scanf("%f,%f,%f",&a,&b,&c);
    float *x=&a,*y=&b,*z=&c;

    fun(x,y,z);
    printf("最大值为:%f\n最小值为:%f\n",*z,  *x);
 } 
 void fun(float *x,float *y,float *z)
 {
if(*y>*x&&*y>*z)
*x = *y;
if(*y<*x&&*y<*z)
*z = *y;
 }

运行截图:

img

img

问题描述:
输入复杂小数会乱码,很奇怪,如果是简单整数则不会,功能是可以实现的。

这是浮点数的误差造成的,不是乱码

这段代码的问题在于函数 fun 中的 if 语句判断有误,当 y 的值处于最大和最小值的中间时,无法正确处理 x 和 z 的值。可以改为如下代码:

void fun(float *x, float *y, float *z) {
    if (*y > *x && *y > *z) {
        *z = *y;
    } else if (*y < *x && *y < *z) {
        *x = *y;
    }
}

也不算乱码,是单精度浮点数的精度问题~
将程序里的float全部修改double就不会有这个问题了。