VS2019下C语言身高体重计算程序的错误排查请求
你的C语言身高体重计算程序问题分析与修复
看起来你在VS2019里写的这个小程序遇到了几个典型的C语言基础问题,我帮你逐个拆解并修复:
首先说说你代码里的具体问题:
- printf多余参数导致的"Too many arguments"警告:你写的
printf("Enter Body Weight: ", weightBody);这类语句里,第二个参数weightBody完全没必要——因为你的格式化字符串里没有对应的占位符(比如%d),printf根本不知道怎么处理这个参数,所以编译器会报错。而且此时weightBody还没被赋值,又触发了"使用未初始化内存"的警告,一举两错。 - 未初始化变量的警告:你声明的
heightBody、weightBody、heightAndWeightResult在声明时都没有初始化值,虽然后面用scanf_s赋值了,但在前面的printf里错误地引用了未赋值的变量,这也是警告来源之一。 - getch()返回值被忽略:VS的编译器会严格检查函数返回值,
getch()返回一个int类型的字符码,如果你不需要使用这个返回值,应该显式忽略它,不然会触发警告。 - 逻辑问题(非编译警告,但功能错误):你把身高和体重直接相加得到
heightAndWeightResult,这显然不是身高体重相关的合理计算(比如常用的BMI是体重(kg)除以身高(m)的平方),这个逻辑你可能需要根据实际需求调整。
修复后的代码:
#include <stdio.h> #include <conio.h> int main(void) { // 初始化变量,避免未初始化内存警告 int heightBody = 0, weightBody = 0; // 如果是计算BMI,建议用浮点类型更准确,这里先按你的需求调整 float calcResult = 0.0f; // 移除多余的参数,printf只需要提示文本即可 printf("Enter Body Weight (kg): "); scanf_s("%d", &weightBody); printf("Enter Body Height (cm): "); scanf_s("%d", &heightBody); // 这里改成BMI计算(更合理的身高体重相关计算),如果你的需求就是相加,可以改回 heightBody + weightBody // 注意要把身高转换成米,所以除以100.0f(用浮点除法避免整数截断) calcResult = weightBody / ((heightBody / 100.0f) * (heightBody / 100.0f)); // 输出结果时添加对应的格式化占位符,不然看不到计算结果 printf("Body Calculation Result: %.2f\n", calcResult); // 显式忽略getch()的返回值,消除警告 (void)getch(); return 0; }
关键修改说明:
- 给变量初始值,消除未初始化内存的警告;
- 移除printf里多余的变量参数,解决"Too many arguments"错误;
- 输出结果时添加对应的格式化占位符(
%.2f表示保留两位小数的浮点数),这样才能看到计算后的结果(你原来的代码里printf没有占位符,根本不会输出计算变量的值); - 用
(void)getch();显式忽略返回值,消除警告; - 把计算逻辑改成了更实用的BMI计算,如果你确实只需要身高体重相加,把计算部分改回
int calcResult = heightBody + weightBody;并对应修改printf的占位符为%d即可。
内容的提问来源于stack exchange,提问作者Juaquin
相关产品推荐
相关产品推荐

