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

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的配对关系完全不符合你预期的执行逻辑。

实现思路

  1. 先实现正确的闰年判定:
    满足以下两个条件任意一个即为闰年:
    • 年份能被4整除,且不能被100整除
    • 年份能被400整除
  2. 按月份判断天数:
    • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:21:02