qq_39354968 2023-10-18 20:06 采纳率: 0%
浏览 7

12345678901


#include <stdio.h>

int main() {
    int year, month, day;
    int days_in_month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int total_days = 0;
    int weekday;

    scanf("%d %d %d", &year, &month, &day);

    // 计算闰年
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        days_in_month[2] = 29;
    }

    // 计算总天数
    for (int i = 1; i < month; i++) {
        total_days += days_in_month[i];
    }
    total_days += day;

    // 计算星期几
    int year_days = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
    weekday = (year_days + total_days) % 7;

    printf("%d %d\n", total_days, weekday);

    return 0;
}
  • 写回答

2条回答 默认 最新

  • AICodeThunder 2023-10-18 20:10
    关注

    (1)如果用户输入了非法的日期(如2月30日),你的程序可能会出现错误或未定义的行为。你应该在读取输入后检查它们是否合法。

    (2)scanf使用"%d %d %d"读取三个整数。如果用户在输入时没有按这个格式(例如,输入"1 2 3"而不是"1 2 3 "),scanf可能会出错。你应该在scanf后添加一个换行符,以允许用户在每行之间输入日期。

    基于以上建议,以下是修改后的代码:

    #include <stdio.h>
    
    int main() {
        int year, month, day;
        int days_in_month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int total_days = 0;
        int weekday;
        //scanf格式改为"%d %d %d\n",允许用户在每行之间输入日期
        scanf("%d %d %d\n", &year, &month, &day);
        
        //检查日期的合法性
        if (month < 1 || month > 12 || day < 1 || day > days_in_month[month-1]) {
            printf("Invalid date!\n");
            return 0;
        }
        
        //计算闰年
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            days_in_month[2] = 29; //如果是闰年,二月份有29天
        }
        
        //计算总天数
        for (int i = 1; i < month; i++) {
            total_days += days_in_month[i]; //加上每个月的天数
        }
        total_days += day; //加上当月的天数
        
        //计算星期几
        int year_days = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400; //计算year到1的总天数
        weekday = (year_days + total_days) % 7; //计算总天数到7的余数,得到星期几
        printf("Total days: %d\n", total_days); //输出总天数
        printf("Weekday: %d\n", weekday); //输出星期几,周日为0,周一为1,以此类推
        return 0;
    }
    

    以上代码添加了输入检查以防止非法日期。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题