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

编写带参数无返回值的C函数出错:输入浮点数为何输出0.00000?

问题分析与修复方案

嘿,这个问题我太熟了——你踩了C语言值传递的经典坑!输出0.00000的原因很简单:你写的get_numbers函数根本没修改到你原本的变量,它改的只是函数内部的临时副本而已。

具体来说:

  • C语言里函数参数默认是值传递:当你调用get_numbers(a, b)时,程序会把a和b的当前值复制一份,传给函数里的形参a和b
  • 你在函数里用scanf修改的是这份临时副本,等函数执行完,副本就被销毁了,主函数里的原变量从头到尾都是初始的0值,输出当然就是0.00000了

最直接的修复:用指针传递变量地址

要让函数能修改外部的变量,你得把变量的内存地址传给函数(也就是用指针),这样函数就能直接操作原变量的存储空间。修改后的代码如下:

#include <stdio.h>
// 把函数参数改成指针类型
void get_numbers(float *a, float *b);
void get_numbers(float *a, float *b) {
    printf("Enter the first number: ");
    // 直接用指针指向的地址存输入值,scanf需要的就是变量地址
    scanf("%f", a);
    printf("Enter the second number: ");
    scanf("%f", b);
}

// 主函数调用示例
int main() {
    float num1, num2;
    // 传递变量的地址(用&取地址符)
    get_numbers(&num1, &num2);
    printf("First number: %f\nSecond number: %f\n", num1, num2);
    return 0;
}

为什么这样就对了?

  • &num1和&num2拿到的是这两个变量在内存里的地址,把它们传给函数的指针参数a和b
  • scanf("%f", a)会把用户输入的数值直接写到这个地址对应的内存位置,也就是你主函数里num1和num2的存储空间,这样原变量就被正确修改了

其他可选思路

如果你对指针不太习惯,也可以把两个数值封装成一个结构体,让函数返回这个结构体。不过指针是处理这类“函数修改外部变量”问题最常用、最高效的方式,建议好好掌握~

内容的提问来源于stack exchange,提问作者Supakorn Srisawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:39:09