whatttttttt 2018-10-26 03:22 采纳率: 100%
浏览 1005
已采纳

更改主调函数中的变量,使用scanf给变量赋值怎么正确使用?

如下代码,请帮忙解答,谢谢。
在main()函数中调用时
为什么用scanf的时候,输入double类型的值时得出的值是:
1,2
x is -92559604281615349000000000000000000000000000000000000000000000.000000,y is -92559604377396321000000000000000000000000000000000000000000000.000000
x value is -92559604281615349000000000000000000000000000000000000000000000.000000,y value is -92559604377396321000000000000000000000000000000000000000000000.000000
min is -92559604377396321000000000000000000000000000000000000000000000.000000,max is -92559604281615349000000000000000000000000000000000000000000000.000000

直接给a,b赋值是正确的。
x value is 1.000000,y value is 2.000000
min is 1.000000,max is 2.000000

#include
#include

void change(double* x, double* y);

int main(void)
{
double a,b;
scanf("%f,%f",&a,&b);

printf("x is %f,y is %f\n",a,b);
change(&a, &b);
a = 1.0;
b = 2.0;
change(&a, &b);

system("pause");

}
void change(double* x, double* y)
{
double min,max;
min = *x;
max = *y;
if(*x > *y)
{
min = *y;
max = *x;
}
printf("x value is %f,y value is %f\nmin is %f,max is %f\n",*x,*y,min,max);
}

  • 写回答

1条回答

  • 内核之道 PostgreSQL领域优质创作者 2018-10-26 04:31
    关注
     1.原因是:
     scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值,而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重要的。如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量(没有提到的是,float型的为模式可能不同于double型的位模式。
     因为double 是64位的,而float是32位的;所以在使用scanf输入double类型时,
    
    
    
     上面的代码需改为:
     scanf("%f,%f",&a,&b);---->scanf("%lf,%lf",&a,&b);便可。其他地方都没有问题的。
    

    望采纳!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题