C++函数返回值无法传递至main,输出始终为0求排查方案
问题排查与修正:C++温度统计程序无法返回最值的问题
核心错误分析
- 值传递导致变量无法更新:
getData函数的BigHigh和BigLow采用值传递,函数内部修改的只是局部副本,不会影响main函数中定义的原变量。 - 错误的返回语句:C++中
return BigHigh, BigLow;是逗号表达式,实际仅返回BigLow的值,且函数声明为返回单个double,无法同时返回两个值,完全不符合需求。 - 无意义的返回值声明:
indexHighTemp和indexLowTemp函数声明返回double,但函数体内无return语句,会触发未定义行为;且这两个函数仅负责打印,无需返回值。 - 初始值设置不合理:
BigHigh初始为0,若所有月份最高温都低于0,统计结果会错误显示为0;BigLow初始为0,若所有月份最低温都高于0,统计结果同样出错。 - 最低温判断逻辑错误:原代码用
tempmatrix[x][1] > BigLow判断最低温,实际应该是<,否则会统计出最高的最低温,完全违背需求。
修正后的代码
#include <iostream> #include <cfloat> // 引入DBL_MIN和DBL_MAX的定义 using namespace std; // 使用引用传递,直接修改main函数中的变量 void getData(double tempmatrix[][2], double &BigHigh, double &BigLow) { for(int x = 0; x < 12; ++x) { cout << "Enter the highest temperature for Month " << x+1 << ": "; cin >> tempmatrix[x][0]; if(tempmatrix[x][0] > BigHigh) { BigHigh = tempmatrix[x][0]; } cout << "Enter the lowest temperature for Month " << x+1 << ": "; cin >> tempmatrix[x][1]; // 修正最低温判断逻辑 if(tempmatrix[x][1] < BigLow) { BigLow = tempmatrix[x][1]; } } } // 修改为void类型,无需返回值 void indexHighTemp(double BigHigh) { cout << "\nHighest recorded temperature (according to you) was: " << BigHigh << endl; } void indexLowTemp(double BigLow) { cout << "\nLowest recorded temperature (according to you) was: " << BigLow << endl; } // main函数必须返回int类型,符合C++标准 int main () { double tempmatrix[12][2]; // 初始化BigHigh为double最小值,BigLow为double最大值,确保第一个输入能覆盖初始值 double BigHigh = DBL_MIN, BigLow = DBL_MAX; getData(tempmatrix, BigHigh, BigLow); indexHighTemp(BigHigh); indexLowTemp(BigLow); return 0; }
关键修正说明
- 引用传递替代值传递:将
getData的BigHigh和BigLow参数改为引用类型(double &),让函数内部的修改直接作用于main中的原变量。 - 移除无效返回值:
getData改为void类型,不再尝试返回多个值,通过引用传递完成变量更新。 - 修正判断逻辑:把最低温的判断条件从
>改为<,确保统计的是真正的最低温度。 - 合理初始化最值:用
DBL_MIN和DBL_MAX初始化BigHigh和BigLow,避免初始值干扰统计结果。 - 规范main函数:补充
main函数的int返回类型,符合C++标准要求。
内容的提问来源于stack exchange,提问作者Mathieu Bayana
相关产品推荐
相关产品推荐

