You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言订阅计费程序问题:askSubscriptionQuestions无法存储浮点值

问题排查与解决思路

核心原因分析

你遇到的问题大概率是参数传递方式错误导致的——如果askSubscriptionQuestions函数采用值传递,函数内部对变量的修改只会作用于局部副本,完全不会影响主函数里的netflixBill、disneyBill等变量。

具体排查与修复步骤

  • 检查函数参数定义:确保askSubscriptionQuestions的参数是指针类型,正确的函数声明应该是:
    void askSubscriptionQuestions(float *netflix, float *disney, float *hulu, float *amazon);
    
  • 检查函数调用方式:调用时必须传递变量的地址,而非变量本身,正确写法如下:
    askSubscriptionQuestions(&netflixBill, &disneyBill, &huluBill, &amazonBill);
    
  • 检查函数内部赋值逻辑:在askSubscriptionQuestions函数中,必须通过指针解引用来修改原变量的值,示例代码:
    *netflix = 15.99; // 替换为你的实际输入/计算逻辑
    
    若直接写netflix = 15.99;,只是修改了指针变量自身的地址,完全不会影响主函数里的目标变量。
  • 排查输入逻辑问题:如果使用scanf获取输入,要注意写法——因为参数是指针,所以不需要再加&,正确写法:
    scanf("%f", netflix);
    
    误写scanf("%f", &netflix);会把输入值写到指针变量的地址上,导致原变量始终为初始值0。

额外验证技巧

可以在askSubscriptionQuestions函数内部赋值完成后,立刻打印指针指向的变量值,确认赋值是否成功;回到主函数后再打印一次,对比两者结果,就能快速定位是传递环节还是输入环节出了问题。

内容的提问来源于stack exchange,提问作者Robert Pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:40:56