#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;
}
12345678901
- 写回答
- 好问题 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; }
以上代码添加了输入检查以防止非法日期。
解决 无用评论 打赏 举报
悬赏问题
- ¥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指向的问题