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 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器