C++新手求输入年月输出当月最后日期的实现提示 需考虑闰年
代码问题修正与实现方案
现有代码错误汇总
- 拼写错误:文件流类名写错,
ifstreeam应为ifstream,该错误会直接导致编译失败。 - 语法规则错误:C++ 中
if的判断条件必须包裹在小括号内,=是赋值运算符,==才是相等判断运算符;你写的if (year) = ...;逻辑完全错误,且末尾多余的分号会直接终止if的作用域。 - 闰年判断逻辑错误:正确的闰年判定规则为「能被4整除且不能被100整除,或能被400整除」,你当前的逻辑漏了「不能被100整除」的约束,会把2100年这类非闰年误判为闰年。
- 条件判断语法错误:所有
if后的判断条件都未加小括号,例如if month == 2需改为if (month == 2);else if (month) = 2中误用赋值运算符,逻辑完全不符合预期。 - 多值判断写法错误:C++不支持
month = 1,3,5...这类多值相等判断,需用逻辑或运算符||拼接多个相等判断,例如month == 1 || month == 3 || month == 5。 - 分支配对逻辑错误:代码缩进混乱导致
if和else的配对关系完全不符合你预期的执行逻辑。
实现思路
- 先实现正确的闰年判定:
满足以下两个条件任意一个即为闰年:- 年份能被4整除,且不能被100整除
- 年份能被400整除
- 按月份判断天数:
- 1、3、5、7、8、10、12月固定为31天
- 4、6、9、11月固定为30天
- 2月闰年返回29天,平年返回28天
修正后可运行代码
#include <iostream> #include <fstream> using namespace std; int main() { int loopNum; ifstream infile("input2.txt"); // 可选:加文件打开失败判断 if (!infile.is_open()) { cout << "文件打开失败" << endl; return 1; } infile >> loopNum; for (int i = 0; i < loopNum; i++) { int year, month; infile >> year >> month; int days; // 判断月份天数 if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { days = 31; } else if (month == 4 || month == 6 || month == 9 || month == 11) { days = 30; } else if (month == 2) { // 闰年判断 bool isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); days = isLeap ? 29 : 28; } else { cout << "月份输入非法" << endl; continue; } cout << days << endl; } infile.close(); return 0; }
内容的提问来源于stack exchange,提问作者Tuvshin
相关产品推荐
相关产品推荐

