C语言中函数调用实现重量转换的指针应用问题
问题分析与修正代码
你的代码核心问题在于对指针的使用方式错误,以及函数返回值的不合理声明。以下是修正后的代码和详细解释:
修正后的代码
#include <stdio.h> // 函数原型改为void,因为不需要返回值 void weight(float* grm, float* ton, float* lbs); int main() { float grams, tons, pounds; weight(&grams, &tons, £s); // 打印所有转换结果 printf("克(Gram): %.2f\n", grams); printf("吨(Ton): %.6f\n", tons); printf("磅(Lbs): %.2f\n", pounds); return 0; } void weight(float* grm, float* ton, float* lbs) { float kg; printf("请输入商品的千克重量: "); scanf("%f", &kg); // 使用解引用操作符(*)修改指针指向的变量值 *grm = 1000 * kg; // 千克转克 *ton = 0.001 * kg; // 千克转吨 *lbs = 2.20462 * kg; // 更精确的千克转磅系数(原代码2.25误差较大) }
关键修正点说明
函数返回类型调整:
原函数声明为int但未返回任何值,属于未定义行为。由于我们通过指针直接修改主函数中的变量,不需要返回值,因此将函数返回类型改为void。指针解引用操作:
原代码中grm=1000*kg;是错误的——grm是指针变量,存储的是主函数中变量的内存地址,直接给它赋值浮点数会覆盖地址值,根本不会修改目标变量。正确的做法是使用*grm(解引用操作),表示访问指针指向的内存位置,然后将计算结果赋值给该位置。磅转换系数修正:
原代码中使用2.25作为千克转磅的系数不够准确,标准系数约为2.20462,这里做了优化,你也可以根据需求改回2.25。完善输出内容:
主函数中补充了吨和磅的打印,让结果更完整,并添加了小数点位数控制,使输出更美观。
内容的提问来源于stack exchange,提问作者Harshal Malani
相关产品推荐
相关产品推荐

