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

C++一周温度统计程序Bug求助:最高/最低温度对应日期始终显示为周日的修复方案

问题根源与修复方案

1. 核心错误:混淆赋值与比较运算符

你代码里的日期判断部分犯了一个经典的C++语法错误——用赋值运算符=代替了比较运算符==,这就是日期始终显示为周日的关键原因:

// 错误写法:把max的值赋给temp[0],而非比较两者是否相等
if(temp[0]=max){maxdayname="Monday";};

当你写temp[i] = max时,这是执行赋值操作:把max的值塞给temp[i],而这个表达式的返回值就是被赋的max值(只要max不是0,就会被视为true)。程序会依次执行所有这些if判断,最后到temp[6] = max时,赋值操作生效,条件为真,maxdayname就会被覆盖成Sunday;同理mindayname也会被最后一个if语句改成Sunday。

修复方法:把所有判断相等的地方替换成==:

// 正确的比较写法
if(temp[0] == max){maxdayname="Monday";};
if(temp[1] == max){maxdayname="Tuesday";};
// ... 其余的日期判断同理修改

2. 代码优化建议(可选,让代码更简洁健壮)

当前代码写了大量重复的if判断,不仅冗余,还没法处理多个日期出现相同极值的情况(比如两天温度都是最高)。可以用字符串数组存储星期名称,结合循环简化逻辑:

优化后的完整代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // 用数组存储星期名称,索引对应temp数组的位置
    const vector<string> dayNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    double temp[7];

    // 循环输入7天温度,避免重复代码
    for(int i = 0; i < 7; ++i){
        cout << "Enter temperature for " << dayNames[i] << ":" << endl;
        cin >> temp[i];
    }

    // 初始化极值和对应的日期列表
    double maxTemp = temp[0];
    double minTemp = temp[0];
    vector<string> maxDays = {dayNames[0]};
    vector<string> minDays = {dayNames[0]};

    // 一次循环同时找极值和对应日期,提升效率
    for(int i = 1; i < 7; ++i){
        // 处理最高温度
        if(temp[i] > maxTemp){
            maxTemp = temp[i];
            maxDays.clear();
            maxDays.push_back(dayNames[i]);
        } else if(temp[i] == maxTemp){
            maxDays.push_back(dayNames[i]);
        }

        // 处理最低温度
        if(temp[i] < minTemp){
            minTemp = temp[i];
            minDays.clear();
            minDays.push_back(dayNames[i]);
        } else if(temp[i] == minTemp){
            minDays.push_back(dayNames[i]);
        }
    }

    // 输出结果,支持多个日期的情况
    cout << "Maximum temperature is " << maxTemp << " on ";
    for(size_t j = 0; j < maxDays.size(); ++j){
        if(j > 0) cout << ", ";
        cout << maxDays[j];
    }
    cout << endl;

    cout << "Minimum temperature is " << minTemp << " on ";
    for(size_t j = 0; j < minDays.size(); ++j){
        if(j > 0) cout << ", ";
        cout << minDays[j];
    }
    cout << endl;

    return 0;
}

优化点说明

  • 用vector<string>存储星期名称,避免重复的字符串字面量
  • 循环输入温度,减少重复的cout和cin代码
  • 一次遍历同时计算极值和对应日期,提升代码效率
  • 支持多个日期出现相同最高/最低温度的情况,比如输出Maximum temperature is 27 on Tuesday, Sunday

测试验证

修复核心错误后,输入你提供的测试数据:

Enter temperature for Monday: 24.5
Enter temperature for Tuesday: 27
Enter temperature for Wednesday: 23
Enter temperature for Thursday: 26.8
Enter temperature for Friday: 30.1
Enter temperature for Saturday: 28.1
Enter temperature for Sunday: 27.3

会正确输出:

Maximum temperature is 30.1 on Friday
Minimum temperature is 23 on Wednesday

内容的提问来源于stack exchange,提问作者Jibran Mustafa Virk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:17:41