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

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;
}

关键修正说明

  1. 引用传递替代值传递:将getData的BigHigh和BigLow参数改为引用类型(double &),让函数内部的修改直接作用于main中的原变量。
  2. 移除无效返回值:getData改为void类型,不再尝试返回多个值,通过引用传递完成变量更新。
  3. 修正判断逻辑:把最低温的判断条件从>改为<,确保统计的是真正的最低温度。
  4. 合理初始化最值:用DBL_MIN和DBL_MAX初始化BigHigh和BigLow,避免初始值干扰统计结果。
  5. 规范main函数:补充main函数的int返回类型,符合C++标准要求。

内容的提问来源于stack exchange,提问作者Mathieu Bayana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:54:50