C++月份天数查询程序:二月闰年判断逻辑错误求助
修正C++月份天数程序的闰年逻辑错误
原代码存在的问题:
- 二月的28天判断被错误放到了
case 3(三月)分支,逻辑完全错位 if(b=0)是赋值操作而非相等判断,应该用==- 闰年判断规则不完整:只检查了能被4整除,忽略了整百年需被400整除的规则(比如1900年不是闰年,但原代码会误判)
- 月份输出对应全错:比如
case 5输出四月、case 13对应十二月,索引和月份完全不匹配
修正后的代码:
#include <iostream> using namespace std; int main(){ cout << "What year are you in?" << endl; int year = 0; cin >> year; cout << "Enter an index for one of the 12 months of the year:" << endl; int month = 0; cin >> month; // 完善闰年判断逻辑 bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); switch(month){ case 1: cout << "January is 31 days"; break; case 2: if(isLeapYear){ cout << "February is 29 days"; } else { cout << "February is 28 days"; } break; case 3: cout << "March is 31 days"; break; case 4: cout << "April is 30 days"; break; case 5: cout << "May is 31 days"; break; case 6: cout << "June is 30 days"; break; case 7: cout << "July is 31 days"; break; case 8: cout << "August is 31 days"; break; case 9: cout << "September is 30 days"; break; case 10: cout << "October is 31 days"; break; case 11: cout << "November is 30 days"; break; case 12: cout << "December is 31 days"; break; default: cout << "Not a valid index"; } return 0; }
关键修改说明:
- 将二月的两种天数判断合并到
case 2分支,用if-else清晰区分闰年和平年 - 把错误的赋值操作
b=0替换为相等判断==,并改用更直观的isLeapYear布尔变量存储闰年结果 - 实现完整的闰年规则:能被4整除但不能被100整除,或者能被400整除
- 修正所有月份的
case对应关系,确保1-12月输出正确的月份名称和天数 - 移除无效的
case 13,规范月份索引范围为1-12
内容的提问来源于stack exchange,提问作者Anixton
相关产品推荐
相关产品推荐

