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
相关产品推荐
相关产品推荐

